Skip site navigation (1)Skip section navigation (2)
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>