Date: Wed, 12 Mar 2003 08:18:58 -0800 (PST) From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 26775 for review Message-ID: <200303121618.h2CGIwLj099579@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=26775 Change 26775 by jhb@jhb_laptop on 2003/03/12 08:18:37 IFC @26774. Affected files ... .. //depot/projects/smpng/sys/conf/NOTES#38 integrate .. //depot/projects/smpng/sys/conf/options#48 integrate .. //depot/projects/smpng/sys/dev/ata/ata-all.c#31 integrate .. //depot/projects/smpng/sys/dev/ata/ata-chipset.c#4 integrate .. //depot/projects/smpng/sys/dev/en/midway.c#9 integrate .. //depot/projects/smpng/sys/dev/firewire/sbp.c#11 integrate .. //depot/projects/smpng/sys/dev/hifn/hifn7751.c#6 integrate .. //depot/projects/smpng/sys/dev/hifn/hifn7751var.h#2 integrate .. //depot/projects/smpng/sys/dev/rndtest/rndtest.c#1 branch .. //depot/projects/smpng/sys/dev/rndtest/rndtest.h#1 branch .. //depot/projects/smpng/sys/dev/sound/pcm/ac97.c#13 integrate .. //depot/projects/smpng/sys/dev/ubsec/ubsec.c#9 integrate .. //depot/projects/smpng/sys/dev/ubsec/ubsecvar.h#5 integrate .. //depot/projects/smpng/sys/i386/i386/pmap.c#33 integrate .. //depot/projects/smpng/sys/kern/kern_exit.c#55 integrate .. //depot/projects/smpng/sys/kern/kern_proc.c#45 integrate .. //depot/projects/smpng/sys/kern/kern_resource.c#31 integrate .. //depot/projects/smpng/sys/modules/Makefile#46 integrate .. //depot/projects/smpng/sys/modules/hifn/Makefile#3 integrate .. //depot/projects/smpng/sys/modules/ubsec/Makefile#3 integrate .. //depot/projects/smpng/sys/net/if_vlan.c#16 integrate .. //depot/projects/smpng/sys/netinet/ip_encap.c#10 integrate .. //depot/projects/smpng/sys/netinet6/ip6_input.c#22 integrate .. //depot/projects/smpng/sys/security/mac_portacl/mac_portacl.c#2 integrate Differences ... ==== //depot/projects/smpng/sys/conf/NOTES#38 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/NOTES,v 1.1138 2003/03/11 19:26:15 sam Exp $ +# $FreeBSD: src/sys/conf/NOTES,v 1.1139 2003/03/11 22:47:05 sam Exp $ # # NOTES -- Lines that can be cut/pasted into kernel and hints configs. # @@ -2152,9 +2152,15 @@ device crypto # core crypto support device cryptodev # /dev/crypto for access to h/w +device rndtest # FIPS 140-2 entropy tester + device hifn # Hifn 7951, 7781, etc. +options HIFN_DEBUG # enable debugging support: hw.hifn.debug +options HIFN_RNDTEST # enable rndtest support + device ubsec # Broadcom 5501, 5601, 58xx -device rndtest # FIPS 140-2 entropy tester +options UBSEC_DEBUG # enable debugging support: hw.ubsec.debug +options UBSEC_RNDTEST # enable rndtest support ##################################################################### ==== //depot/projects/smpng/sys/conf/options#48 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options,v 1.381 2003/03/09 11:50:26 akiyama Exp $ +# $FreeBSD: src/sys/conf/options,v 1.382 2003/03/11 22:47:05 sam Exp $ # # On the handling of kernel options # @@ -602,3 +602,10 @@ # Mutex profiling MUTEX_PROFILING opt_global.h +# options for ubsec driver +UBSEC_DEBUG opt_ubsec.h +UBSEC_RNDTEST opt_ubsec.h + +# options for hifn driver +HIFN_DEBUG opt_hifn.h +HIFN_RNDTEST opt_hifn.h ==== //depot/projects/smpng/sys/dev/ata/ata-all.c#31 (text+ko) ==== @@ -25,7 +25,7 @@ * (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: src/sys/dev/ata/ata-all.c,v 1.170 2003/03/08 08:01:27 phk Exp $ + * $FreeBSD: src/sys/dev/ata/ata-all.c,v 1.171 2003/03/12 10:59:35 sos Exp $ */ #include "opt_ata.h" @@ -1240,6 +1240,7 @@ int *fan, int *temp, int *v05, int *v12) { u_int8_t id1, id2, cnt, div; + int error = ENXIO; if (atadev->flags & ATA_D_ENC_PRESENT) { atadev->channel->locking(atadev->channel, ATA_LF_LOCK); @@ -1248,25 +1249,25 @@ id1 = ata_enclosure_sensor(atadev, 0, 0x4f, 0); ata_enclosure_sensor(atadev, 1, 0x4e, 0x80); id2 = ata_enclosure_sensor(atadev, 0, 0x4f, 0); - if (id1 != 0xa3 || id2 != 0x5c) - return ENXIO; - div = 1 << (((ata_enclosure_sensor(atadev, 0, 0x5d, 0) & 0x20) >> 3)+ - ((ata_enclosure_sensor(atadev, 0, 0x47, 0) & 0x30) >> 4)+1); - cnt = ata_enclosure_sensor(atadev, 0, 0x28, 0); - if (cnt == 0xff) - *fan = 0; - else - *fan = 1350000 / cnt / div; - ata_enclosure_sensor(atadev, 1, 0x4e, 0x01); - *temp = (ata_enclosure_sensor(atadev, 0, 0x50, 0) * 10) + - (ata_enclosure_sensor(atadev, 0, 0x50, 0) & 0x80 ? 5 : 0); - *v05 = ata_enclosure_sensor(atadev, 0, 0x23, 0) * 27; - *v12 = ata_enclosure_sensor(atadev, 0, 0x24, 0) * 61; + if (id1 == 0xa3 && id2 == 0x5c) { + div = 1 << (((ata_enclosure_sensor(atadev, 0, 0x5d, 0)&0x20)>>3)+ + ((ata_enclosure_sensor(atadev, 0, 0x47, 0)&0x30)>>4)+1); + cnt = ata_enclosure_sensor(atadev, 0, 0x28, 0); + if (cnt == 0xff) + *fan = 0; + else + *fan = 1350000 / cnt / div; + ata_enclosure_sensor(atadev, 1, 0x4e, 0x01); + *temp = (ata_enclosure_sensor(atadev, 0, 0x50, 0) * 10) + + (ata_enclosure_sensor(atadev, 0, 0x50, 0) & 0x80 ? 5 : 0); + *v05 = ata_enclosure_sensor(atadev, 0, 0x23, 0) * 27; + *v12 = ata_enclosure_sensor(atadev, 0, 0x24, 0) * 61; + error = 0; + } ATA_UNLOCK_CH(atadev->channel); atadev->channel->locking(atadev->channel, ATA_LF_UNLOCK); - return 0; } - return ENXIO; + return error; } void ==== //depot/projects/smpng/sys/dev/ata/ata-chipset.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ * (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: src/sys/dev/ata/ata-chipset.c,v 1.12 2003/03/10 08:20:14 sos Exp $ + * $FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.14 2003/03/12 15:45:52 sos Exp $ */ #include "opt_ata.h" #include <sys/param.h> @@ -924,21 +924,21 @@ struct ata_pci_controller *ctlr = device_get_softc(dev); struct ata_chip_id *idx; static struct ata_chip_id ids[] = - {{ ATA_PDC20246, 0, PROLD, 0x00, ATA_UDMA2, "Promise" }, - { ATA_PDC20262, 0, PRNEW, 0x00, ATA_UDMA4, "Promise" }, - { ATA_PDC20263, 0, PRNEW, 0x00, ATA_UDMA4, "Promise" }, - { ATA_PDC20265, 0, PRNEW, 0x00, ATA_UDMA5, "Promise" }, - { ATA_PDC20267, 0, PRNEW, 0x00, ATA_UDMA5, "Promise" }, - { ATA_PDC20268, 0, PRTX, PRTX4, ATA_UDMA5, "Promise TX2" }, - { ATA_PDC20268R, 0, PRTX, PRTX4, ATA_UDMA5, "Promise TX2" }, - { ATA_PDC20269, 0, PRTX, 0x00, ATA_UDMA6, "Promise TX2" }, - { ATA_PDC20271, 0, PRTX, 0x00, ATA_UDMA6, "Promise TX2" }, - { ATA_PDC20275, 0, PRTX, 0x00, ATA_UDMA6, "Promise TX2" }, - { ATA_PDC20276, 0, PRTX, PRSX6K, ATA_UDMA6, "Promise TX2" }, - { ATA_PDC20277, 0, PRTX, 0x00, ATA_UDMA6, "Promise TX2" }, -#if notyet - { ATA_PDC20376, 0, PRCH, 0x00, ATA_UDMA6, "Promise SATA" }, - { ATA_PDC20621, 0, PRCH, 0x00, ATA_UDMA6, "Promise SX4000" }, + {{ ATA_PDC20246, 0, PROLD, 0x00, ATA_UDMA2, "Promise PDC20246" }, + { ATA_PDC20262, 0, PRNEW, 0x00, ATA_UDMA4, "Promise PDC20262" }, + { ATA_PDC20263, 0, PRNEW, 0x00, ATA_UDMA4, "Promise PDC20263" }, + { ATA_PDC20265, 0, PRNEW, 0x00, ATA_UDMA5, "Promise PDC20265" }, + { ATA_PDC20267, 0, PRNEW, 0x00, ATA_UDMA5, "Promise PDC20267" }, + { ATA_PDC20268, 0, PRTX, PRTX4, ATA_UDMA5, "Promise PDC20268" }, + { ATA_PDC20268R, 0, PRTX, 0x00, ATA_UDMA5, "Promise PDC20268R" }, + { ATA_PDC20269, 0, PRTX, 0x00, ATA_UDMA6, "Promise PDC20269" }, + { ATA_PDC20271, 0, PRTX, 0x00, ATA_UDMA6, "Promise PDC20271" }, + { ATA_PDC20275, 0, PRTX, 0x00, ATA_UDMA6, "Promise PDC20275" }, + { ATA_PDC20276, 0, PRTX, PRSX6K, ATA_UDMA6, "Promise PDC20276" }, + { ATA_PDC20277, 0, PRTX, 0x00, ATA_UDMA6, "Promise PDC20277" }, +#if 0 + { ATA_PDC20376, 0, PRCH, 0x00, ATA_SDMA6, "Promise PDC20376" }, + { ATA_PDC20621, 0, PRCH, 0x00, ATA_SDMA6, "Promise SX4000" }, #endif { 0, 0, 0, 0, 0, 0}}; char *desc, buffer[64]; @@ -972,7 +972,7 @@ } else { start = end = 0; - desc = "Promise TX2"; + desc = "Promise PDC20268"; } } else @@ -1644,17 +1644,17 @@ struct ata_pci_controller *ctlr = device_get_softc(dev); struct ata_chip_id *idx; static struct ata_chip_id ids[] = - {{ ATA_VIA82C586, 0x02, VIA33, 0x00, ATA_UDMA2, "VIA 82C586b" }, + {{ ATA_VIA82C586, 0x02, VIA33, 0x00, ATA_UDMA2, "VIA 82C586B" }, { ATA_VIA82C586, 0x00, VIA33, 0x00, ATA_WDMA2, "VIA 82C586" }, - { ATA_VIA82C596, 0x12, VIA66, VIACLK, ATA_UDMA4, "VIA 82C596b" }, + { ATA_VIA82C596, 0x12, VIA66, VIACLK, ATA_UDMA4, "VIA 82C596B" }, { ATA_VIA82C596, 0x00, VIA33, 0x00, ATA_UDMA2, "VIA 82C596" }, - { ATA_VIA82C686, 0x40, VIA100, VIABUG, ATA_UDMA5, "VIA 82C686b"}, - { ATA_VIA82C686, 0x10, VIA66, VIACLK, ATA_UDMA4, "VIA 82C686a" }, + { ATA_VIA82C686, 0x40, VIA100, VIABUG, ATA_UDMA5, "VIA 82C686B"}, + { ATA_VIA82C686, 0x10, VIA66, VIACLK, ATA_UDMA4, "VIA 82C686A" }, { ATA_VIA82C686, 0x00, VIA33, 0x00, ATA_UDMA2, "VIA 82C686" }, { ATA_VIA8231, 0x00, VIA100, VIABUG, ATA_UDMA5, "VIA 8231" }, { ATA_VIA8233, 0x00, VIA100, 0x00, ATA_UDMA5, "VIA 8233" }, - { ATA_VIA8233C, 0x00, VIA100, 0x00, ATA_UDMA5, "VIA 8233c" }, - { ATA_VIA8233A, 0x00, VIA133, 0x00, ATA_UDMA6, "VIA 8233a" }, + { ATA_VIA8233C, 0x00, VIA100, 0x00, ATA_UDMA5, "VIA 8233C" }, + { ATA_VIA8233A, 0x00, VIA133, 0x00, ATA_UDMA6, "VIA 8233A" }, { ATA_VIA8235, 0x00, VIA133, 0x00, ATA_UDMA6, "VIA 8235" }, { 0, 0, 0, 0, 0, 0 }}; char buffer[64]; @@ -1811,13 +1811,14 @@ ata_find_dev(device_t dev, u_int32_t devid, u_int32_t revid) { device_t *children; - int nchildren, i; + int nchildren, i, slot = pci_get_slot(dev); if (device_get_children(device_get_parent(dev), &children, &nchildren)) return 0; for (i = 0; i < nchildren; i++) { - if (pci_get_devid(children[i]) == devid && + if (pci_get_slot(children[i]) == slot && + pci_get_devid(children[i]) == devid && pci_get_revid(children[i]) >= revid) { free(children, M_TEMP); return 1; ==== //depot/projects/smpng/sys/dev/en/midway.c#9 (text+ko) ==== @@ -32,7 +32,7 @@ * (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: src/sys/dev/en/midway.c,v 1.35 2003/03/04 23:19:54 jlemon Exp $ + * $FreeBSD: src/sys/dev/en/midway.c,v 1.36 2003/03/12 10:28:26 kjc Exp $ */ /* @@ -841,67 +841,30 @@ * p166: bestburstlen=64, alburst=0 */ -#if defined(__FreeBSD__) && defined(__i386__) -#define NBURSTS 3 /* number of bursts to use for dmaprobe */ -#define BOUNDARY 1024 /* test misaligned dma crossing the bounday. - should be n * 64. at least 64*(NBURSTS+1). - dell P6 with EDO DRAM has 1K bounday problem */ -#endif - STATIC void en_dmaprobe(sc) struct en_softc *sc; { -#ifdef NBURSTS - /* be careful. kernel stack is only 8K */ - u_int8_t buffer[BOUNDARY * 2 + 64 * (NBURSTS + 1)]; -#else u_int32_t srcbuf[64], dstbuf[64]; -#endif u_int8_t *sp, *dp; int bestalgn, bestnotalgn, lcv, try; sc->alburst = 0; -#ifdef NBURSTS - /* setup src and dst buf at the end of the boundary */ - sp = (u_int8_t *)roundup((uintptr_t)(void *)buffer, 64); - while (((uintptr_t)(void *)sp & (BOUNDARY - 1)) != (BOUNDARY - 64)) - sp += 64; - dp = sp + BOUNDARY; - - /* - * we can't dma across page boundary so that, if buf is at a page - * boundary, move it to the next page. but still either src or dst - * will be at the boundary, which should be ok. - */ - if ((((uintptr_t)(void *)sp + 64) & PAGE_MASK) == 0) - sp += 64; - if ((((uintptr_t)(void *)dp + 64) & PAGE_MASK) == 0) - dp += 64; -#else /* !NBURSTS */ sp = (u_int8_t *) srcbuf; while ((((unsigned long) sp) % MIDDMA_MAXBURST) != 0) sp += 4; dp = (u_int8_t *) dstbuf; while ((((unsigned long) dp) % MIDDMA_MAXBURST) != 0) dp += 4; -#endif /* !NBURSTS */ bestalgn = bestnotalgn = en_dmaprobe_doit(sc, sp, dp, 0); for (lcv = 4 ; lcv < MIDDMA_MAXBURST ; lcv += 4) { try = en_dmaprobe_doit(sc, sp+lcv, dp+lcv, 0); -#ifdef NBURSTS - if (try < bestnotalgn) { - bestnotalgn = try; - break; - } -#else if (try < bestnotalgn) bestnotalgn = try; -#endif } if (bestalgn != bestnotalgn) /* need bursts aligned */ @@ -960,11 +923,7 @@ EN_WRITE(sc, MID_DST_RP(0), 0); EN_WRITE(sc, MID_WP_ST_CNT(0), 0); -#ifdef NBURSTS - for (lcv = 0 ; lcv < 64*NBURSTS; lcv++) /* set up sample data */ -#else for (lcv = 0 ; lcv < 68 ; lcv++) /* set up sample data */ -#endif sp[lcv] = lcv+1; EN_WRITE(sc, MID_MAST_CSR, MID_MCSR_ENDMA); /* enable DMA (only) */ @@ -994,11 +953,7 @@ /* zero SRAM and dest buffer */ for (cnt = 0 ; cnt < 1024; cnt += 4) EN_WRITE(sc, MID_BUFOFF+cnt, 0); /* zero memory */ -#ifdef NBURSTS - for (cnt = 0 ; cnt < 64*NBURSTS; cnt++) -#else for (cnt = 0 ; cnt < 68 ; cnt++) -#endif dp[cnt] = 0; if (wmtry) { @@ -1009,29 +964,6 @@ bcode = en_sz2b(lcv); count = 1; } -#ifdef NBURSTS - /* build lcv-byte-DMA x NBURSTS */ - if (sc->is_adaptec) - EN_WRITE(sc, sc->dtq_chip, MID_MK_TXQ_ADP(lcv*NBURSTS, 0, MID_DMA_END, 0)); - else - EN_WRITE(sc, sc->dtq_chip, MID_MK_TXQ_ENI(count*NBURSTS, 0, MID_DMA_END, bcode)); - EN_WRITE(sc, sc->dtq_chip+4, vtophys(sp)); - EN_WRAPADD(MID_DTQOFF, MID_DTQEND, sc->dtq_chip, 8); - EN_WRITE(sc, MID_DMA_WRTX, MID_DTQ_A2REG(sc->dtq_chip)); - cnt = 1000; - while (EN_READ(sc, MID_DMA_RDTX) != MID_DTQ_A2REG(sc->dtq_chip)) { - DELAY(1); - cnt--; - if (cnt == 0) { - printf("%s: unexpected timeout in tx DMA test\n", sc->sc_dev.dv_xname); -/* - printf(" alignment=0x%x, burst size=%d, dma addr reg=0x%x\n", - (u_long)sp & 63, lcv, EN_READ(sc, MID_DMA_ADDR)); -*/ - return(retval); /* timeout, give up */ - } - } -#else /* !NBURSTS */ if (sc->is_adaptec) EN_WRITE(sc, sc->dtq_chip, MID_MK_TXQ_ADP(lcv, 0, MID_DMA_END, 0)); else @@ -1048,7 +980,6 @@ } } EN_WRAPADD(MID_DTQOFF, MID_DTQEND, sc->dtq_chip, 8); -#endif /* !NBURSTS */ reg = EN_READ(sc, MID_INTACK); if ((reg & MID_INT_DMA_TX) != MID_INT_DMA_TX) { printf("%s: unexpected status in tx DMA test: 0x%x\n", @@ -1059,26 +990,7 @@ /* "return to sender..." address is known ... */ -#ifdef NBURSTS - /* build lcv-byte-DMA x NBURSTS */ if (sc->is_adaptec) - EN_WRITE(sc, sc->drq_chip, MID_MK_RXQ_ADP(lcv*NBURSTS, 0, MID_DMA_END, 0)); - else - EN_WRITE(sc, sc->drq_chip, MID_MK_RXQ_ENI(count*NBURSTS, 0, MID_DMA_END, bcode)); - EN_WRITE(sc, sc->drq_chip+4, vtophys(dp)); - EN_WRAPADD(MID_DRQOFF, MID_DRQEND, sc->drq_chip, 8); - EN_WRITE(sc, MID_DMA_WRRX, MID_DRQ_A2REG(sc->drq_chip)); - cnt = 1000; - while (EN_READ(sc, MID_DMA_RDRX) != MID_DRQ_A2REG(sc->drq_chip)) { - DELAY(1); - cnt--; - if (cnt == 0) { - printf("%s: unexpected timeout in rx DMA test\n", sc->sc_dev.dv_xname); - return(retval); /* timeout, give up */ - } - } -#else /* !NBURSTS */ - if (sc->is_adaptec) EN_WRITE(sc, sc->drq_chip, MID_MK_RXQ_ADP(lcv, 0, MID_DMA_END, 0)); else EN_WRITE(sc, sc->drq_chip, MID_MK_RXQ_ENI(count, 0, MID_DMA_END, bcode)); @@ -1094,7 +1006,6 @@ } } EN_WRAPADD(MID_DRQOFF, MID_DRQEND, sc->drq_chip, 8); -#endif /* !NBURSTS */ reg = EN_READ(sc, MID_INTACK); if ((reg & MID_INT_DMA_RX) != MID_INT_DMA_RX) { printf("%s: unexpected status in rx DMA test: 0x%x\n", @@ -1107,15 +1018,8 @@ return(bcmp(sp, dp, wmtry)); /* wmtry always exits here, no looping */ } -#ifdef NBURSTS - if (bcmp(sp, dp, lcv * NBURSTS)) { -/* printf("DMA test failed! lcv=%d, sp=0x%x, dp=0x%x\n", lcv, sp, dp); */ - return(retval); /* failed, use last value */ - } -#else if (bcmp(sp, dp, lcv)) return(retval); /* failed, use last value */ -#endif retval = lcv; ==== //depot/projects/smpng/sys/dev/firewire/sbp.c#11 (text+ko) ==== @@ -30,7 +30,7 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/firewire/sbp.c,v 1.39 2003/03/08 08:01:28 phk Exp $ + * $FreeBSD: src/sys/dev/firewire/sbp.c,v 1.40 2003/03/12 10:36:53 simokawa Exp $ * */ @@ -43,6 +43,9 @@ #include <machine/bus.h> #include <sys/malloc.h> +#if __FreeBSD_version < 500106 +#include <sys/devicestat.h> /* for struct devstat */ +#endif #include <cam/cam.h> #include <cam/cam_ccb.h> ==== //depot/projects/smpng/sys/dev/hifn/hifn7751.c#6 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/hifn/hifn7751.c,v 1.12 2003/03/11 22:23:19 sam Exp $ */ +/* $FreeBSD: src/sys/dev/hifn/hifn7751.c,v 1.13 2003/03/11 22:47:06 sam Exp $ */ /* $OpenBSD: hifn7751.c,v 1.120 2002/05/17 00:33:34 deraadt Exp $ */ /* @@ -41,11 +41,10 @@ * */ -#define HIFN_DEBUG - /* * Driver for the Hifn 7751 encryption processor. */ +#include "opt_hifn.h" #include <sys/param.h> #include <sys/systm.h> @@ -72,6 +71,10 @@ #include <pci/pcivar.h> #include <pci/pcireg.h> + +#ifdef HIFN_RNDTEST +#include <dev/rndtest/rndtest.h> +#endif #include <dev/hifn/hifn7751reg.h> #include <dev/hifn/hifn7751var.h> @@ -109,6 +112,9 @@ DRIVER_MODULE(hifn, pci, hifn_driver, hifn_devclass, 0, 0); MODULE_DEPEND(hifn, crypto, 1, 1, 1); +#ifdef HIFN_RNDTEST +MODULE_DEPEND(hifn, rndtest, 1, 1, 1); +#endif static void hifn_reset_board(struct hifn_softc *, int); static void hifn_reset_puc(struct hifn_softc *); @@ -230,6 +236,12 @@ return "Unknown-vendor unknown-part"; } +static void +default_harvest(struct rndtest_state *rsp, void *buf, u_int count) +{ + random_harvest(buf, count, count*NBBY, 0, RANDOM_PURE); +} + /* * Attach an interface that successfully probed. */ @@ -621,6 +633,15 @@ u_int32_t r; int i; +#ifdef HIFN_RNDTEST + sc->sc_rndtest = rndtest_attach(sc->sc_dev); + if (sc->sc_rndtest) + sc->sc_harvest = rndtest_harvest; + else + sc->sc_harvest = default_harvest; +#else + sc->sc_harvest = default_harvest; +#endif if ((sc->sc_flags & HIFN_IS_7811) == 0) { /* Reset 7951 public key/rng engine */ WRITE_REG_1(sc, HIFN_1_PUB_RESET, @@ -705,7 +726,8 @@ if (sc->sc_rngfirst) sc->sc_rngfirst = 0; else - random_harvest(num, RANDOM_BITS(2), RANDOM_PURE); + (*sc->sc_harvest)(sc->sc_rndtest, + num, sizeof (num)); } } else { num[0] = READ_REG_1(sc, HIFN_1_RNG_DATA); @@ -714,7 +736,8 @@ if (sc->sc_rngfirst) sc->sc_rngfirst = 0; else - random_harvest(num, RANDOM_BITS(1), RANDOM_PURE); + (*sc->sc_harvest)(sc->sc_rndtest, + num, sizeof (num[0])); } callout_reset(&sc->sc_rngto, sc->sc_rnghz, hifn_rng, sc); ==== //depot/projects/smpng/sys/dev/hifn/hifn7751var.h#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/hifn/hifn7751var.h,v 1.1 2002/10/04 20:32:37 sam Exp $ */ +/* $FreeBSD: src/sys/dev/hifn/hifn7751var.h,v 1.2 2003/03/11 22:47:06 sam Exp $ */ /* $OpenBSD: hifn7751var.h,v 1.42 2002/04/08 17:49:42 jason Exp $ */ /* @@ -133,6 +133,8 @@ #define HS_STATE_USED 1 /* allocated, but key not on card */ #define HS_STATE_KEY 2 /* allocated and key is on card */ +struct rndstate_test; + /* * Holds data specific to a single HIFN board. */ @@ -171,6 +173,9 @@ struct callout sc_tickto; /* for managing DMA */ int sc_rngfirst; int sc_rnghz; /* RNG polling frequency */ + struct rndtest_state *sc_rndtest; /* RNG test state */ + void (*sc_harvest)(struct rndtest_state *, + void *, u_int); int sc_c_busy; /* command ring busy */ int sc_s_busy; /* source data ring busy */ int sc_d_busy; /* destination data ring busy */ ==== //depot/projects/smpng/sys/dev/sound/pcm/ac97.c#13 (text+ko) ==== @@ -30,7 +30,7 @@ #include "mixer_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/ac97.c,v 1.36 2003/02/28 18:04:52 orion Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/ac97.c,v 1.37 2003/03/12 15:11:25 orion Exp $"); MALLOC_DEFINE(M_AC97, "ac97", "ac97 codec"); @@ -128,7 +128,7 @@ { 0x43525920, 0x07, 0, "CS4294/98", 0 }, { 0x43525930, 0x07, 0, "CS4299", 0 }, { 0x43525940, 0x07, 0, "CS4201", 0 }, - { 0x43525950, 0x07, 0, "CS4205", 0 }, + { 0x43525958, 0x07, 0, "CS4205", 0 }, { 0x43525960, 0x07, 0, "CS4291A", 0 }, { 0x434d4961, 0x00, 0, "CMI9739", 0 }, { 0x434d4941, 0x00, 0, "CMI9738", 0 }, ==== //depot/projects/smpng/sys/dev/ubsec/ubsec.c#9 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/ubsec/ubsec.c,v 1.18 2003/03/11 18:43:24 sam Exp $ */ +/* $FreeBSD: src/sys/dev/ubsec/ubsec.c,v 1.19 2003/03/11 22:47:06 sam Exp $ */ /* $OpenBSD: ubsec.c,v 1.115 2002/09/24 18:33:26 jason Exp $ */ /* @@ -40,12 +40,12 @@ * */ -#define UBSEC_DEBUG - /* * uBsec 5[56]01, 58xx hardware crypto accelerator */ +#include "opt_ubsec.h" + #include <sys/param.h> #include <sys/systm.h> #include <sys/proc.h> @@ -90,6 +90,9 @@ #define letoh16(x) le16toh(x) #define letoh32(x) le32toh(x) +#ifdef UBSEC_RNDTEST +#include <dev/rndtest/rndtest.h> +#endif #include <dev/ubsec/ubsecreg.h> #include <dev/ubsec/ubsecvar.h> @@ -127,6 +130,9 @@ DRIVER_MODULE(ubsec, pci, ubsec_driver, ubsec_devclass, 0, 0); MODULE_DEPEND(ubsec, crypto, 1, 1, 1); +#ifdef UBSEC_RNDTEST +MODULE_DEPEND(ubsec, rndtest, 1, 1, 1); +#endif static void ubsec_intr(void *); static int ubsec_newsession(void *, u_int32_t *, struct cryptoini *); @@ -231,6 +237,12 @@ return "Unknown-vendor unknown-part"; } +static void +default_harvest(struct rndtest_state *rsp, void *buf, u_int count) +{ + random_harvest(buf, count, count*NBBY, 0, RANDOM_PURE); +} + static int ubsec_attach(device_t dev) { @@ -405,6 +417,15 @@ #ifndef UBSEC_NO_RNG if (sc->sc_flags & UBS_FLAGS_RNG) { sc->sc_statmask |= BS_STAT_MCR2_DONE; +#ifdef UBSEC_RNDTEST + sc->sc_rndtest = rndtest_attach(dev); + if (sc->sc_rndtest) + sc->sc_harvest = rndtest_harvest; + else + sc->sc_harvest = default_harvest; +#else + sc->sc_harvest = default_harvest; +#endif if (ubsec_dma_malloc(sc, sizeof(struct ubsec_mcr), &sc->sc_rng.rng_q.q_mcr, 0)) @@ -477,6 +498,11 @@ crypto_unregister_all(sc->sc_cid); +#ifdef UBSEC_RNDTEST + if (sc->sc_rndtest) + rndtest_detach(sc->sc_rndtest); +#endif + while (!SIMPLEQ_EMPTY(&sc->sc_freequeue)) { struct ubsec_q *q; @@ -1652,10 +1678,9 @@ struct ubsec_q2_rng *rng = (struct ubsec_q2_rng *)q; ubsec_dma_sync(&rng->rng_buf, BUS_DMASYNC_POSTREAD); - random_harvest(rng->rng_buf.dma_vaddr, - UBSEC_RNG_BUFSIZ*sizeof (u_int32_t), - UBSEC_RNG_BUFSIZ*sizeof (u_int32_t)*NBBY, 0, - RANDOM_PURE); + (*sc->sc_harvest)(sc->sc_rndtest, + rng->rng_buf.dma_vaddr, + UBSEC_RNG_BUFSIZ*sizeof (u_int32_t)); rng->rng_used = 0; callout_reset(&sc->sc_rngto, sc->sc_rnghz, ubsec_rng, sc); break; ==== //depot/projects/smpng/sys/dev/ubsec/ubsecvar.h#5 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/ubsec/ubsecvar.h,v 1.5 2003/02/07 21:44:52 sam Exp $ */ +/* $FreeBSD: src/sys/dev/ubsec/ubsecvar.h,v 1.6 2003/03/11 22:47:06 sam Exp $ */ /* $OpenBSD: ubsecvar.h,v 1.35 2002/09/24 18:33:26 jason Exp $ */ /* @@ -174,6 +174,8 @@ #define q_dst_segs q_dst.segs #define q_dst_mapsize q_dst.mapsize +struct rndstate_test; + struct ubsec_softc { device_t sc_dev; /* device backpointer */ struct mtx sc_mtx; /* per-driver lock */ @@ -201,6 +203,9 @@ struct callout sc_rngto; /* rng timeout */ int sc_rnghz; /* rng poll time */ struct ubsec_q2_rng sc_rng; + struct rndtest_state *sc_rndtest; /* RNG test state */ + void (*sc_harvest)(struct rndtest_state *, + void *, u_int); struct ubsec_dma sc_dmaa[UBS_MAX_NQUEUE]; struct ubsec_q *sc_queuea[UBS_MAX_NQUEUE]; SIMPLEQ_HEAD(,ubsec_q2) sc_q2free; /* free list */ ==== //depot/projects/smpng/sys/i386/i386/pmap.c#33 (text+ko) ==== @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/i386/i386/pmap.c,v 1.396 2003/02/27 02:05:16 julian Exp $ + * $FreeBSD: src/sys/i386/i386/pmap.c,v 1.397 2003/03/12 07:38:37 jake Exp $ */ /* @@ -214,7 +214,6 @@ static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va); -static int pmap_release_free_page(pmap_t pmap, vm_page_t p); static vm_page_t _pmap_allocpte(pmap_t pmap, unsigned ptepindex); static pt_entry_t *pmap_pte_quick(pmap_t pmap, vm_offset_t va); static vm_page_t pmap_page_lookup(vm_object_t object, vm_pindex_t pindex); @@ -1295,7 +1294,9 @@ pmap_pinit(pmap) register struct pmap *pmap; { - vm_page_t ptdpg; + vm_page_t ptdpg[NPGPTD]; + vm_offset_t pa; + int i; /* * No need to allocate page table space yet but we do need a valid @@ -1313,18 +1314,24 @@ NPGPTD); /* - * allocate the page directory page + * allocate the page directory page(s) */ - ptdpg = vm_page_grab(pmap->pm_pteobj, PTDPTDI, - VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED | VM_ALLOC_ZERO); - vm_page_lock_queues(); - vm_page_flag_clear(ptdpg, PG_BUSY); - ptdpg->valid = VM_PAGE_BITS_ALL; - vm_page_unlock_queues(); + for (i = 0; i < NPGPTD; i++) { + ptdpg[i] = vm_page_grab(pmap->pm_pteobj, PTDPTDI + i, + VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED | + VM_ALLOC_ZERO); + vm_page_lock_queues(); + vm_page_flag_clear(ptdpg[i], PG_BUSY); + ptdpg[i]->valid = VM_PAGE_BITS_ALL; + vm_page_unlock_queues(); + } + + pmap_qenter((vm_offset_t)pmap->pm_pdir, ptdpg, NPGPTD); - pmap_qenter((vm_offset_t)pmap->pm_pdir, &ptdpg, NPGPTD); - if ((ptdpg->flags & PG_ZERO) == 0) - bzero(pmap->pm_pdir, PAGE_SIZE); + for (i = 0; i < NPGPTD; i++) { + if ((ptdpg[i]->flags & PG_ZERO) == 0) + bzero(pmap->pm_pdir + (i * NPDEPG), PAGE_SIZE); + } mtx_lock_spin(&allpmaps_lock); LIST_INSERT_HEAD(&allpmaps, pmap, pm_list); @@ -1336,9 +1343,11 @@ pmap->pm_pdir[MPPTDI] = PTD[MPPTDI]; #endif - /* install self-referential address mapping entry */ - pmap->pm_pdir[PTDPTDI] = - VM_PAGE_TO_PHYS(ptdpg) | PG_V | PG_RW | PG_A | PG_M; + /* install self-referential address mapping entry(s) */ + for (i = 0; i < NPGPTD; i++) { + pa = VM_PAGE_TO_PHYS(ptdpg[i]); + pmap->pm_pdir[PTDPTDI + i] = pa | PG_V | PG_RW | PG_A | PG_M; + } pmap->pm_active = 0; TAILQ_INIT(&pmap->pm_pvlist); @@ -1358,50 +1367,6 @@ /* XXX: Remove this stub when no longer called */ } -static int -pmap_release_free_page(pmap_t pmap, vm_page_t p) -{ - pd_entry_t *pde = pmap->pm_pdir; - - /* - * This code optimizes the case of freeing non-busy - * page-table pages. Those pages are zero now, and - * might as well be placed directly into the zero queue. - */ - vm_page_lock_queues(); - if (vm_page_sleep_if_busy(p, FALSE, "pmaprl")) - return (0); - vm_page_busy(p); - - /* - * Remove the page table page from the processes address space. - */ - pde[p->pindex] = 0; - pmap->pm_stats.resident_count--; - - if (p->hold_count) { - panic("pmap_release: freeing held page table page"); - } - /* - * Page directory pages need to have the kernel - * stuff cleared, so they can go into the zero queue also. - */ - if (p->pindex == PTDPTDI) { - bzero(pde + KPTDI, nkpt * sizeof(pd_entry_t)); -#ifdef SMP - pde[MPPTDI] = 0; -#endif - pde[APTDPTDI] = 0; - pmap_kremove((vm_offset_t) pmap->pm_pdir); - } - - p->wire_count--; - atomic_subtract_int(&cnt.v_wire_count, 1); - vm_page_free_zero(p); - vm_page_unlock_queues(); - return 1; -} - /* * this routine is called if the page table page is not * mapped correctly. @@ -1525,36 +1490,45 @@ void pmap_release(pmap_t pmap) { - vm_page_t p,n,ptdpg; - vm_object_t object = pmap->pm_pteobj; - int curgeneration; + vm_object_t object; + vm_page_t m; + int i; + + object = pmap->pm_pteobj; + + KASSERT(object->ref_count == 1, + ("pmap_release: pteobj reference count %d != 1", + object->ref_count)); + KASSERT(pmap->pm_stats.resident_count == 0, + ("pmap_release: pmap resident count %ld != 0", + pmap->pm_stats.resident_count)); -#if defined(DIAGNOSTIC) - if (object->ref_count != 1) - panic("pmap_release: pteobj reference count != 1"); -#endif - - ptdpg = NULL; mtx_lock_spin(&allpmaps_lock); LIST_REMOVE(pmap, pm_list); mtx_unlock_spin(&allpmaps_lock); -retry: - curgeneration = object->generation; - for (p = TAILQ_FIRST(&object->memq); p != NULL; p = n) { - n = TAILQ_NEXT(p, listq); - if (p->pindex == PTDPTDI) { - ptdpg = p; - continue; - } - while (1) { - if (!pmap_release_free_page(pmap, p) && - (object->generation != curgeneration)) - goto retry; - } + + bzero(pmap->pm_pdir + KPTDI, nkpt * sizeof(*pmap->pm_pdir)); + for (i = 0; i < NPGPTD; i++) { + pmap->pm_pdir[PTDPTDI + i] = 0; + pmap->pm_pdir[APTDPTDI + i] = 0; } +#ifdef SMP + pmap->pm_pdir[MPPTDI] = 0; +#endif - if (ptdpg && !pmap_release_free_page(pmap, ptdpg)) - goto retry; + pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD); + + vm_page_lock_queues(); + for (i = 0; i < NPGPTD; i++) { + m = TAILQ_FIRST(&object->memq); + m->wire_count--; + atomic_subtract_int(&cnt.v_wire_count, 1); + vm_page_busy(m); + vm_page_free_zero(m); + } + KASSERT(TAILQ_EMPTY(&object->memq), + ("pmap_release: leaking page table pages")); + vm_page_unlock_queues(); } static int ==== //depot/projects/smpng/sys/kern/kern_exit.c#55 (text+ko) ==== @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)kern_exit.c 8.7 (Berkeley) 2/12/94 - * $FreeBSD: src/sys/kern/kern_exit.c,v 1.200 2003/03/11 06:01:44 davidxu Exp $ + * $FreeBSD: src/sys/kern/kern_exit.c,v 1.201 2003/03/12 11:10:04 tjr Exp $ */ #include "opt_compat.h" @@ -657,17 +657,17 @@ mtx_unlock(&Giant); return (0); } - /* - * Remove other references to this process to ensure - * we have an exclusive reference. - */ - leavepgrp(p); sx_xlock(&allproc_lock); LIST_REMOVE(p, p_list); /* off zombproc */ sx_xunlock(&allproc_lock); LIST_REMOVE(p, p_sibling); + /* + * Remove other references to this process to ensure + * we have an exclusive reference. + */ + leavepgrp(p); sx_xunlock(&proctree_lock); /* ==== //depot/projects/smpng/sys/kern/kern_proc.c#45 (text+ko) ==== @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)kern_proc.c 8.7 (Berkeley) 2/14/95 - * $FreeBSD: src/sys/kern/kern_proc.c,v 1.173 2003/02/27 02:05:17 julian Exp $ + * $FreeBSD: src/sys/kern/kern_proc.c,v 1.174 2003/03/12 16:14:55 jhb Exp $ */ #include "opt_ktrace.h" @@ -1025,7 +1025,7 @@ int *name = (int*) arg1; u_int namelen = arg2; struct proc *p; - struct pargs *pa; + struct pargs *pa, *newpa; int error = 0; if (namelen != 1) @@ -1039,12 +1039,12 @@ PROC_UNLOCK(p); return (0); } - PROC_UNLOCK(p); - if (req->newptr && curproc != p) + if (req->newptr && curproc != p) { + PROC_UNLOCK(p); return (EPERM); + } - PROC_LOCK(p); pa = p->p_args; pargs_hold(pa); PROC_UNLOCK(p); @@ -1055,24 +1055,22 @@ if (req->newptr == NULL) return (error); >>> TRUNCATED FOR MAIL (1000 lines) <<< To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303121618.h2CGIwLj099579>