Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Mar 2003 11:02:25 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 26849 for review
Message-ID:  <200303131902.h2DJ2PfP078112@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=26849

Change 26849 by jhb@jhb_laptop on 2003/03/13 11:01:52

	IFC @26848.  Loop jhb_ktrace changes back in.

Affected files ...

.. //depot/projects/smpng/sys/alpha/alpha/busdma_machdep.c#10 integrate
.. //depot/projects/smpng/sys/dev/ata/atapi-all.c#18 integrate
.. //depot/projects/smpng/sys/dev/ata/atapi-cd.c#32 integrate
.. //depot/projects/smpng/sys/dev/puc/pucdata.c#9 integrate
.. //depot/projects/smpng/sys/dev/sio/sio.c#25 integrate
.. //depot/projects/smpng/sys/fs/specfs/spec_vnops.c#23 integrate
.. //depot/projects/smpng/sys/gnu/ext2fs/fs.h#5 integrate
.. //depot/projects/smpng/sys/i386/i386/busdma_machdep.c#10 integrate
.. //depot/projects/smpng/sys/ia64/ia64/busdma_machdep.c#10 integrate
.. //depot/projects/smpng/sys/kern/kern_exec.c#53 integrate
.. //depot/projects/smpng/sys/kern/kern_exit.c#56 integrate
.. //depot/projects/smpng/sys/kern/kern_fork.c#52 integrate
.. //depot/projects/smpng/sys/kern/kern_ktrace.c#29 integrate
.. //depot/projects/smpng/sys/kern/kern_physio.c#7 integrate
.. //depot/projects/smpng/sys/kern/kern_proc.c#46 integrate
.. //depot/projects/smpng/sys/kern/kern_resource.c#32 integrate
.. //depot/projects/smpng/sys/kern/subr_bus.c#20 integrate
.. //depot/projects/smpng/sys/kern/uipc_mbuf.c#14 integrate
.. //depot/projects/smpng/sys/kern/vfs_bio.c#37 integrate
.. //depot/projects/smpng/sys/kern/vfs_cluster.c#19 integrate
.. //depot/projects/smpng/sys/kern/vfs_default.c#17 integrate
.. //depot/projects/smpng/sys/kern/vfs_subr.c#44 integrate
.. //depot/projects/smpng/sys/net/if_atm.h#3 integrate
.. //depot/projects/smpng/sys/net/if_atmsubr.c#7 integrate
.. //depot/projects/smpng/sys/net/if_vlan_var.h#7 integrate
.. //depot/projects/smpng/sys/netinet/tcp_input.c#30 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_vnops.c#23 integrate
.. //depot/projects/smpng/sys/nfsserver/nfs_serv.c#26 integrate
.. //depot/projects/smpng/sys/pci/agp_sis.c#4 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/busdma_machdep.c#5 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/bus_machdep.c#11 integrate
.. //depot/projects/smpng/sys/sys/buf.h#18 integrate
.. //depot/projects/smpng/sys/sys/ktrace.h#7 integrate
.. //depot/projects/smpng/sys/sys/proc.h#73 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_vnops.c#14 integrate
.. //depot/projects/smpng/sys/vm/vm_map.c#30 integrate
.. //depot/projects/smpng/sys/vm/vm_map.h#17 integrate
.. //depot/projects/smpng/sys/vm/vm_pageout.c#24 integrate

Differences ...

==== //depot/projects/smpng/sys/alpha/alpha/busdma_machdep.c#10 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.30 2003/02/26 02:16:05 mux Exp $
+ * $FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.31 2003/03/13 17:17:30 mux Exp $
  */
 
 #include <sys/param.h>
@@ -367,10 +367,12 @@
 		 *     and handles multi-seg allocations.  Nobody is doing
 		 *     multi-seg allocations yet though.
 		 */
+		mtx_lock(&Giant);
 		*vaddr = contigmalloc(size, M_DEVBUF,
 		    (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK,
 		    0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
 		    dmat->boundary);
+		mtx_unlock(&Giant);
 	}
 	if (*vaddr == NULL)
 		return (ENOMEM);
@@ -400,8 +402,11 @@
 		panic("bus_dmamem_free: Invalid map freed\n");
 	if ((size <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
 		free(vaddr, M_DEVBUF);
-	else
+	else {
+		mtx_lock(&Giant);
 		contigfree(vaddr, size, M_DEVBUF);
+		mtx_unlock(&Giant);
+	}
 }
 
 void
@@ -842,11 +847,13 @@
 
 		if (bpage == NULL)
 			break;
+		mtx_lock(&Giant);
 		bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF,
 							 M_NOWAIT, 0ul,
 							 dmat->lowaddr,
 							 PAGE_SIZE,
 							 dmat->boundary);
+		mtx_unlock(&Giant);
 		if (bpage->vaddr == NULL) {
 			free(bpage, M_DEVBUF);
 			break;

==== //depot/projects/smpng/sys/dev/ata/atapi-all.c#18 (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/atapi-all.c,v 1.98 2003/03/03 11:15:32 sos Exp $
+ * $FreeBSD: src/sys/dev/ata/atapi-all.c,v 1.99 2003/03/13 09:04:55 sos Exp $
  */
 
 #include "opt_ata.h"
@@ -148,7 +148,8 @@
 	}
 	free(request, M_ATAPI);
     }
-    atadev->channel->dma->free(atadev);
+    if (atadev->channel->dma)
+	atadev->channel->dma->free(atadev);
     free(atadev->result, M_ATAPI);
     atadev->driver = NULL;
     atadev->flags = 0;

==== //depot/projects/smpng/sys/dev/ata/atapi-cd.c#32 (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/atapi-cd.c,v 1.133 2003/03/08 21:32:28 phk Exp $
+ * $FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.135 2003/03/13 09:12:17 sos Exp $
  */
 
 #include "opt_ata.h"
@@ -211,7 +211,6 @@
 		free(entry, M_ACD);
 	    }
 	    devstat_remove_entry(cdp->driver[subdev]->stats);
-	    free(cdp->driver[subdev]->stats, M_ACD);
 	    ata_free_lun(&acd_lun_map, cdp->driver[subdev]->lun);
 	    free(cdp->driver[subdev], M_ACD);
 	}
@@ -228,7 +227,6 @@
     destroy_dev(cdp->dev);
     EVENTHANDLER_DEREGISTER(dev_clone, cdp->clone_evh);
     devstat_remove_entry(cdp->stats);
-    free(cdp->stats, M_ACD);
     ata_free_name(atadev);
     ata_free_lun(&acd_lun_map, cdp->lun);
     free(cdp, M_ACD);
@@ -506,11 +504,6 @@
     if (!cdp)
 	return ENXIO;
 
-    if (flags & FWRITE) {
-	if (count_dev(dev) > 1)
-	    return EBUSY;
-    }
-
     /* wait if drive is not finished loading the medium */
     while (timeout--) {
 	struct atapi_reqsense *sense = cdp->device->result;

==== //depot/projects/smpng/sys/dev/puc/pucdata.c#9 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/pucdata.c,v 1.14 2002/12/30 19:45:30 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/pucdata.c,v 1.16 2003/03/12 17:56:03 sobomax Exp $");
 
 /*
  * PCI "universal" communications card driver configuration data (used to
@@ -1000,22 +1000,46 @@
 	    {	0xb00c, 0x091c, 0,	0	},
 	    {   0xffff, 0xffff, 0,      0       },
 	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ * 4 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ * 4 },
+	    },
+	},
+
+	{   "IC Book Labs Dreadnought x16 Pro",
+	    NULL,
+	    {   0xb00c, 0x081c, 0,      0       },
+	    {   0xffff, 0xffff, 0,      0       },
+	    {
+		{ PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x20, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x28, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x30, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x38, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x40, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x48, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x50, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x58, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x60, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x68, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x70, COM_FREQ * 8 },
+		{ PUC_PORT_TYPE_COM, 0x10, 0x78, COM_FREQ * 8 },
 	    },
 	},
 

==== //depot/projects/smpng/sys/dev/sio/sio.c#25 (text+ko) ====

@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/sio/sio.c,v 1.390 2003/03/03 16:24:44 phk Exp $
+ * $FreeBSD: src/sys/dev/sio/sio.c,v 1.391 2003/03/12 17:20:24 sobomax Exp $
  *	from: @(#)com.c	7.5 (Berkeley) 5/16/91
  *	from: i386/isa sio.c,v 1.234
  */
@@ -730,7 +730,7 @@
 /* EXTRA DELAY? */
 	failures[0] = sio_getreg(com, com_cfcr) - CFCR_8BITS;
 	failures[1] = sio_getreg(com, com_ier) - IER_ETXRDY;
-	failures[2] = sio_getreg(com, com_mcr) - mcr_image;
+	failures[2] = (sio_getreg(com, com_mcr) & 0x7f) - mcr_image;
 	DELAY(10000);		/* Some internal modems need this time */
 	irqmap[1] = isa_irq_pending();
 	failures[4] = (sio_getreg(com, com_iir) & IIR_IMASK) - IIR_TXRDY;

==== //depot/projects/smpng/sys/fs/specfs/spec_vnops.c#23 (text+ko) ====

@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)spec_vnops.c	8.14 (Berkeley) 5/21/95
- * $FreeBSD: src/sys/fs/specfs/spec_vnops.c,v 1.198 2003/03/03 19:15:39 njl Exp $
+ * $FreeBSD: src/sys/fs/specfs/spec_vnops.c,v 1.199 2003/03/13 07:31:45 jeff Exp $
  */
 
 #include <sys/param.h>
@@ -123,8 +123,6 @@
 	return (VOCALL(spec_vnodeop_p, ap->a_desc->vdesc_offset, ap));
 }
 
-static void spec_getpages_iodone(struct buf *bp);
-
 /*
  * Open a special file.
  */
@@ -689,15 +687,6 @@
 	return (ap->a_flags & F_FLOCK ? EOPNOTSUPP : EINVAL);
 }
 
-static void
-spec_getpages_iodone(bp)
-	struct buf *bp;
-{
-
-	bp->b_flags |= B_DONE;
-	wakeup(bp);
-}
-
 static int
 spec_getpages(ap)
 	struct vop_getpages_args *ap;
@@ -755,7 +744,7 @@
 
 	/* Build a minimal buffer header. */
 	bp->b_iocmd = BIO_READ;
-	bp->b_iodone = spec_getpages_iodone;
+	bp->b_iodone = bdone;
 
 	/* B_PHYS is not set, but it is nice to fill this in. */
 	KASSERT(bp->b_rcred == NOCRED, ("leaking read ucred"));
@@ -778,11 +767,7 @@
 	spec_xstrategy(bp->b_vp, bp);
 
 	s = splbio();
-
-	/* We definitely need to be at splbio here. */
-	while ((bp->b_flags & B_DONE) == 0)
-		tsleep(bp, PVM, "spread", 0);
-
+	bwait(bp, PVM, "spread");
 	splx(s);
 
 	if ((bp->b_ioflags & BIO_ERROR) != 0) {

==== //depot/projects/smpng/sys/gnu/ext2fs/fs.h#5 (text+ko) ====

@@ -37,7 +37,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)fs.h	8.7 (Berkeley) 4/19/94
- * $FreeBSD: src/sys/gnu/ext2fs/fs.h,v 1.12 2003/02/25 03:37:46 jeff Exp $
+ * $FreeBSD: src/sys/gnu/ext2fs/fs.h,v 1.13 2003/03/13 07:07:16 jeff Exp $
  */
 
 /*
@@ -168,9 +168,9 @@
 	long flags; \
 	int s; \
 	s = splbio(); \
+	BUF_LOCK(bp, LK_EXCLUSIVE, NULL); \
 	flags = (bp)->b_flags; \
 	(bp)->b_flags &= ~(B_DIRTY | B_LOCKED); \
-	BUF_LOCK(bp, LK_EXCLUSIVE, NULL); \
 	bremfree(bp); \
 	splx(s); \
 	if (flags & B_DIRTY) \

==== //depot/projects/smpng/sys/i386/i386/busdma_machdep.c#10 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/i386/i386/busdma_machdep.c,v 1.34 2003/02/26 02:16:05 mux Exp $
+ * $FreeBSD: src/sys/i386/i386/busdma_machdep.c,v 1.35 2003/03/13 17:17:05 mux Exp $
  */
 
 #include <sys/param.h>
@@ -348,10 +348,12 @@
 		 *     and handles multi-seg allocations.  Nobody is doing
 		 *     multi-seg allocations yet though.
 		 */
+		mtx_lock(&Giant);
 		*vaddr = contigmalloc(size, M_DEVBUF,
 		    (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK,
 		    0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
 		    dmat->boundary);
+		mtx_unlock(&Giant);
 	}
 	if (*vaddr == NULL)
 		return (ENOMEM);
@@ -381,8 +383,11 @@
 		panic("bus_dmamem_free: Invalid map freed\n");
 	if ((size <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
 		free(vaddr, M_DEVBUF);
-	else
+	else {
+		mtx_lock(&Giant);
 		contigfree(vaddr, size, M_DEVBUF);
+		mtx_unlock(&Giant);
+	}
 }
 
 void
@@ -793,11 +798,13 @@
 
 		if (bpage == NULL)
 			break;
+		mtx_lock(&Giant);
 		bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF,
 							 M_NOWAIT, 0ul,
 							 dmat->lowaddr,
 							 PAGE_SIZE,
 							 0);
+		mtx_unlock(&Giant);
 		if (bpage->vaddr == 0) {
 			free(bpage, M_DEVBUF);
 			break;

==== //depot/projects/smpng/sys/ia64/ia64/busdma_machdep.c#10 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/ia64/ia64/busdma_machdep.c,v 1.16 2003/02/26 02:16:06 mux Exp $
+ * $FreeBSD: src/sys/ia64/ia64/busdma_machdep.c,v 1.18 2003/03/13 17:18:22 mux Exp $
  */
 
 #include <sys/param.h>
@@ -354,10 +354,12 @@
 		 *     and handles multi-seg allocations.  Nobody is doing
 		 *     multi-seg allocations yet though.
 		 */
+		mtx_lock(&Giant);
 		*vaddr = contigmalloc(dmat->maxsize, M_DEVBUF,
 		    (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK,
 		    0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
 		    dmat->boundary);
+		mtx_unlock(&Giant);
 	}
 	if (*vaddr == NULL)
 		return (ENOMEM);
@@ -377,7 +379,13 @@
 	 */
 	if (map != &nobounce_dmamap)
 		panic("bus_dmamem_free: Invalid map freed\n");
-	free(vaddr, M_DEVBUF);
+	if ((dmat->maxsize <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
+		free(vaddr, M_DEVBUF);
+	else {
+		mtx_lock(&Giant);
+		contigfree(vaddr, dmat->maxsize, M_DEVBUF);
+		mtx_unlock(&Giant);
+	}
 }
 
 #define BUS_DMAMAP_NSEGS ((64 * 1024 / PAGE_SIZE) + 1)
@@ -814,11 +822,13 @@
 
 		if (bpage == NULL)
 			break;
+		mtx_lock(&Giant);
 		bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF,
 							 M_NOWAIT, 0ul,
 							 dmat->lowaddr,
 							 PAGE_SIZE,
 							 0);
+		mtx_unlock(&Giant);
 		if (bpage->vaddr == NULL) {
 			free(bpage, M_DEVBUF);
 			break;

==== //depot/projects/smpng/sys/kern/kern_exec.c#53 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/kern/kern_exec.c,v 1.215 2003/02/27 02:05:17 julian Exp $
+ * $FreeBSD: src/sys/kern/kern_exec.c,v 1.216 2003/03/13 18:24:22 jhb Exp $
  */
 
 #include "opt_ktrace.h"
@@ -178,6 +178,7 @@
 	struct procsig *oldprocsig, *newprocsig;
 #ifdef KTRACE
 	struct vnode *tracevp = NULL;
+	struct ucred *tracecred = NULL;
 #endif
 	struct vnode *textvp = NULL;
 	int credential_changing;
@@ -489,11 +490,13 @@
 		 */
 		setsugid(p);
 #ifdef KTRACE
-		if (p->p_tracep && suser_cred(oldcred, PRISON_ROOT)) {
+		if (p->p_tracevp != NULL && suser_cred(oldcred, PRISON_ROOT)) {
 			mtx_lock(&ktrace_mtx);
 			p->p_traceflag = 0;
-			tracevp = p->p_tracep;
-			p->p_tracep = NULL;
+			tracevp = p->p_tracevp;
+			p->p_tracevp = NULL;
+			tracecred = p->p_tracecred;
+			p->p_tracecred = NULL;
 			mtx_unlock(&ktrace_mtx);
 		}
 #endif
@@ -626,6 +629,8 @@
 #ifdef KTRACE
 	if (tracevp != NULL)
 		vrele(tracevp);
+	if (tracecred != NULL)
+		crfree(tracecred);
 #endif
 	if (oldargs != NULL)
 		pargs_drop(oldargs);

==== //depot/projects/smpng/sys/kern/kern_exit.c#56 (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.201 2003/03/12 11:10:04 tjr Exp $
+ * $FreeBSD: src/sys/kern/kern_exit.c,v 1.203 2003/03/13 18:24:22 jhb Exp $
  */
 
 #include "opt_compat.h"
@@ -135,6 +135,7 @@
 	struct vnode *vtmp;
 #ifdef KTRACE
 	struct vnode *tracevp;
+	struct ucred *tracecred;
 #endif
 
 	GIANT_REQUIRED;
@@ -359,12 +360,16 @@
 	PROC_LOCK(p);
 	mtx_lock(&ktrace_mtx);
 	p->p_traceflag = 0;	/* don't trace the vrele() */
-	tracevp = p->p_tracep;
-	p->p_tracep = NULL;
+	tracevp = p->p_tracevp;
+	p->p_tracevp = NULL;
+	tracecred = p->p_tracecred;
+	p->p_tracecred = NULL;
 	mtx_unlock(&ktrace_mtx);
 	PROC_UNLOCK(p);
 	if (tracevp != NULL)
 		vrele(tracevp);
+	if (tracecred != NULL)
+		crfree(tracecred);
 #endif
 	/*
 	 * Release reference to text vnode
@@ -658,15 +663,14 @@
 				return (0);
 			}
 
+			/*
+			 * Remove other references to this process to ensure
+			 * we have an exclusive reference.
+			 */
 			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_fork.c#52 (text+ko) ====

@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_fork.c	8.6 (Berkeley) 4/8/94
- * $FreeBSD: src/sys/kern/kern_fork.c,v 1.186 2003/02/27 02:05:17 julian Exp $
+ * $FreeBSD: src/sys/kern/kern_fork.c,v 1.187 2003/03/13 18:24:22 jhb Exp $
  */
 
 #include "opt_ktrace.h"
@@ -626,11 +626,15 @@
 	 * Copy traceflag and tracefile if enabled.
 	 */
 	mtx_lock(&ktrace_mtx);
-	KASSERT(p2->p_tracep == NULL, ("new process has a ktrace vnode"));
+	KASSERT(p2->p_tracevp == NULL, ("new process has a ktrace vnode"));
 	if (p1->p_traceflag & KTRFAC_INHERIT) {
 		p2->p_traceflag = p1->p_traceflag;
-		if ((p2->p_tracep = p1->p_tracep) != NULL)
-			VREF(p2->p_tracep);
+		if ((p2->p_tracevp = p1->p_tracevp) != NULL) {
+			VREF(p2->p_tracevp);
+			KASSERT(p1->p_tracecred != NULL,
+			    ("ktrace vnode with no cred"));
+			p2->p_tracecred = crhold(p1->p_tracecred);
+		}
 	}
 	mtx_unlock(&ktrace_mtx);
 #endif

==== //depot/projects/smpng/sys/kern/kern_ktrace.c#29 (text+ko) ====

@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_ktrace.c	8.2 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/kern/kern_ktrace.c,v 1.81 2003/02/19 05:47:25 imp Exp $
+ * $FreeBSD: src/sys/kern/kern_ktrace.c,v 1.83 2003/03/13 18:31:15 jhb Exp $
  */
 
 #include "opt_ktrace.h"
@@ -226,17 +226,23 @@
 	if (req != NULL) {
 		STAILQ_REMOVE_HEAD(&ktr_free, ktr_list);
 		req->ktr_header.ktr_type = type;
-		KASSERT(p->p_tracep != NULL, ("ktrace: no trace vnode"));
-		req->ktr_vp = p->p_tracep;
-		VREF(p->p_tracep);
+		if (p->p_traceflag & KTRFAC_DROP) {
+			req->ktr_header.ktr_type |= KTR_DROP;
+			p->p_traceflag &= ~KTRFAC_DROP;
+		}
+		KASSERT(p->p_tracevp != NULL, ("ktrace: no trace vnode"));
+		KASSERT(p->p_tracecred != NULL, ("ktrace: no trace cred"));
+		req->ktr_vp = p->p_tracevp;
+		VREF(p->p_tracevp);
+		req->ktr_cred = crhold(p->p_tracecred);
 		mtx_unlock(&ktrace_mtx);
 		microtime(&req->ktr_header.ktr_time);
 		req->ktr_header.ktr_pid = p->p_pid;
 		bcopy(p->p_comm, req->ktr_header.ktr_comm, MAXCOMLEN + 1);
-		req->ktr_cred = crhold(td->td_ucred);
 		req->ktr_header.ktr_buffer = NULL;
 		req->ktr_header.ktr_len = 0;
 	} else {
+		p->p_traceflag |= KTRFAC_DROP;
 		pm = print_message;
 		print_message = 0;
 		mtx_unlock(&ktrace_mtx);
@@ -498,6 +504,7 @@
 	int ret = 0;
 	int flags, error = 0;
 	struct nameidata nd;
+	struct ucred *cred;
 
 	td->td_inktrace = 1;
 	if (ops != KTROP_CLEAR) {
@@ -527,15 +534,18 @@
 		sx_slock(&allproc_lock);
 		LIST_FOREACH(p, &allproc, p_list) {
 			PROC_LOCK(p);
-			if (p->p_tracep == vp) {
+			if (p->p_tracevp == vp) {
 				if (ktrcanset(td, p)) {
 					mtx_lock(&ktrace_mtx);
-					p->p_tracep = NULL;
+					cred = p->p_tracecred;
+					p->p_tracecred = NULL;
+					p->p_tracevp = NULL;
 					p->p_traceflag = 0;
 					mtx_unlock(&ktrace_mtx);
 					PROC_UNLOCK(p);
 					(void) vn_close(vp, FREAD|FWRITE,
-						td->td_ucred, td);
+						cred, td);
+					crfree(cred);
 				} else {
 					PROC_UNLOCK(p);
 					error = EPERM;
@@ -654,6 +664,7 @@
 	struct vnode *vp;
 {
 	struct vnode *tracevp = NULL;
+	struct ucred *tracecred = NULL;
 
 	PROC_LOCK(p);
 	if (!ktrcanset(td, p)) {
@@ -662,13 +673,17 @@
 	}
 	mtx_lock(&ktrace_mtx);
 	if (ops == KTROP_SET) {
-		if (p->p_tracep != vp) {
+		if (p->p_tracevp != vp) {
 			/*
 			 * if trace file already in use, relinquish below
 			 */
-			tracevp = p->p_tracep;
+			tracevp = p->p_tracevp;
 			VREF(vp);
-			p->p_tracep = vp;
+			p->p_tracevp = vp;
+		}
+		if (p->p_tracecred != td->td_ucred) {
+			tracecred = p->p_tracecred;
+			p->p_tracecred = crhold(td->td_ucred);
 		}
 		p->p_traceflag |= facs;
 		if (td->td_ucred->cr_uid == 0)
@@ -678,14 +693,18 @@
 		if (((p->p_traceflag &= ~facs) & KTRFAC_MASK) == 0) {
 			/* no more tracing */
 			p->p_traceflag = 0;
-			tracevp = p->p_tracep;
-			p->p_tracep = NULL;
+			tracevp = p->p_tracevp;
+			p->p_tracevp = NULL;
+			tracecred = p->p_tracecred;
+			p->p_tracecred = NULL;
 		}
 	}
 	mtx_unlock(&ktrace_mtx);
 	PROC_UNLOCK(p);
 	if (tracevp != NULL)
 		vrele(tracevp);
+	if (tracecred != NULL)
+		crfree(tracecred);
 
 	return (1);
 }
@@ -748,7 +767,7 @@
 	if (vp == NULL)
 		return;
 	kth = &req->ktr_header;
-	datalen = data_lengths[kth->ktr_type];
+	datalen = data_lengths[(ushort)kth->ktr_type & ~KTR_DROP];
 	buflen = kth->ktr_len;
 	cred = req->ktr_cred;
 	td = curthread;
@@ -804,17 +823,24 @@
 	 * we really do this?  Other processes might have suitable
 	 * credentials for the operation.
 	 */
+	cred = NULL;
 	sx_slock(&allproc_lock);
 	LIST_FOREACH(p, &allproc, p_list) {
 		PROC_LOCK(p);
-		if (p->p_tracep == vp) {
+		if (p->p_tracevp == vp) {
 			mtx_lock(&ktrace_mtx);
-			p->p_tracep = NULL;
+			p->p_tracevp = NULL;
 			p->p_traceflag = 0;
+			cred = p->p_tracecred;
+			p->p_tracecred = NULL;
 			mtx_unlock(&ktrace_mtx);
 			vrele_count++;
 		}
 		PROC_UNLOCK(p);
+		if (cred != NULL) {
+			crfree(cred);
+			cred = NULL;
+		}
 	}
 	sx_sunlock(&allproc_lock);
 	/*

==== //depot/projects/smpng/sys/kern/kern_physio.c#7 (text+ko) ====

@@ -16,7 +16,7 @@
  * 4. Modifications may be freely made to this file if the above conditions
  *    are met.
  *
- * $FreeBSD: src/sys/kern/kern_physio.c,v 1.55 2003/01/20 17:46:48 dillon Exp $
+ * $FreeBSD: src/sys/kern/kern_physio.c,v 1.56 2003/03/13 07:31:45 jeff Exp $
  */
 
 #include <sys/param.h>
@@ -30,12 +30,6 @@
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
 
-static void
-physwakeup(struct buf *bp)
-{
-	wakeup(bp);
-}
-
 int
 physio(dev_t dev, struct uio *uio, int ioflag)
 {
@@ -68,7 +62,7 @@
 			else 
 				bp->b_iocmd = BIO_WRITE;
 			bp->b_dev = dev;
-			bp->b_iodone = physwakeup;
+			bp->b_iodone = bdone;
 			bp->b_data = uio->uio_iov[i].iov_base;
 			bp->b_bcount = uio->uio_iov[i].iov_len;
 			bp->b_offset = uio->uio_offset;
@@ -116,8 +110,10 @@
 
 			DEV_STRATEGY(bp);
 			spl = splbio();
-			while ((bp->b_flags & B_DONE) == 0)
-				tsleep(bp, PRIBIO, "physstr", 0);
+			if (uio->uio_rw == UIO_READ)
+				bwait(bp, PRIBIO, "physrd");
+			else
+				bwait(bp, PRIBIO, "physwr");
 			splx(spl);
 
 			if (uio->uio_segflg == UIO_USERSPACE)

==== //depot/projects/smpng/sys/kern/kern_proc.c#46 (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.174 2003/03/12 16:14:55 jhb Exp $
+ * $FreeBSD: src/sys/kern/kern_proc.c,v 1.176 2003/03/13 18:24:22 jhb Exp $
  */
 
 #include "opt_ktrace.h"
@@ -625,7 +625,7 @@
 	kp->ki_args = p->p_args;
 	kp->ki_textvp = p->p_textvp;
 #ifdef KTRACE
-	kp->ki_tracep = p->p_tracep;
+	kp->ki_tracep = p->p_tracevp;
 	mtx_lock(&ktrace_mtx);
 	kp->ki_traceflag = p->p_traceflag;
 	mtx_unlock(&ktrace_mtx);
@@ -1024,8 +1024,8 @@
 {
 	int *name = (int*) arg1;
 	u_int namelen = arg2;
+	struct pargs *newpa, *pa;
 	struct proc *p;
-	struct pargs *pa, *newpa;
 	int error = 0;
 
 	if (namelen != 1) 
@@ -1048,23 +1048,20 @@
 	pa = p->p_args;
 	pargs_hold(pa);
 	PROC_UNLOCK(p);
-	if (req->oldptr && pa != NULL) {
+	if (req->oldptr != NULL && pa != NULL)
 		error = SYSCTL_OUT(req, pa->ar_args, pa->ar_length);
-	}
 	pargs_drop(pa);
-	if (req->newptr == NULL)
+	if (error != 0 || req->newptr == NULL)
 		return (error);
 
 	if (req->newlen + sizeof(struct pargs) > ps_arg_cache_limit)
-		return (error);
-
+		return (ENOMEM);
 	newpa = pargs_alloc(req->newlen);
 	error = SYSCTL_IN(req, newpa->ar_args, req->newlen);
-	if (error) {
+	if (error != 0) {
 		pargs_free(newpa);
 		return (error);
 	}
-
 	PROC_LOCK(p);
 	pa = p->p_args;
 	p->p_args = newpa;

==== //depot/projects/smpng/sys/kern/kern_resource.c#32 (text+ko) ====

@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_resource.c	8.5 (Berkeley) 1/21/94
- * $FreeBSD: src/sys/kern/kern_resource.c,v 1.120 2003/03/12 11:24:41 tjr Exp $
+ * $FreeBSD: src/sys/kern/kern_resource.c,v 1.121 2003/03/13 00:54:53 tjr Exp $
  */
 
 #include "opt_compat.h"
@@ -98,21 +98,17 @@
 
 	switch (uap->which) {
 	case PRIO_PROCESS:
-		if (uap->who == 0) {
-			mtx_lock_spin(&sched_lock);
+		if (uap->who == 0)
 			low = td->td_ksegrp->kg_nice;
-			mtx_unlock_spin(&sched_lock);
-		} else {
+		else {
 			p = pfind(uap->who);
 			if (p == NULL)
 				break;
 			if (p_cansee(td, p) == 0) {
-				mtx_lock_spin(&sched_lock);
 				FOREACH_KSEGRP_IN_PROC(p, kg) {
 					if (kg->kg_nice < low)
 						low = kg->kg_nice;
 				}
-				mtx_unlock_spin(&sched_lock);
 			}
 			PROC_UNLOCK(p);
 		}
@@ -136,12 +132,10 @@
 		LIST_FOREACH(p, &pg->pg_members, p_pglist) {
 			PROC_LOCK(p);
 			if (!p_cansee(td, p)) {
-				mtx_lock_spin(&sched_lock);
 				FOREACH_KSEGRP_IN_PROC(p, kg) {
 					if (kg->kg_nice < low)
 						low = kg->kg_nice;
 				}
-				mtx_unlock_spin(&sched_lock);
 			}
 			PROC_UNLOCK(p);
 		}
@@ -157,12 +151,10 @@
 			PROC_LOCK(p);
 			if (!p_cansee(td, p) &&
 			    p->p_ucred->cr_uid == uap->who) {
-				mtx_lock_spin(&sched_lock);
 				FOREACH_KSEGRP_IN_PROC(p, kg) {
 					if (kg->kg_nice < low)
 						low = kg->kg_nice;
 				}
-				mtx_unlock_spin(&sched_lock);
 			}
 			PROC_UNLOCK(p);
 		}
@@ -297,19 +289,15 @@
 	 * Only allow nicing if to more than the lowest nice.
 	 * e.g.  nices of 4,3,2  allow nice to 3 but not 1
 	 */
-	mtx_lock_spin(&sched_lock);
 	FOREACH_KSEGRP_IN_PROC(p, kg) {
 		if (kg->kg_nice < low)
 			low = kg->kg_nice;
 	}
- 	if (n < low && suser(td)) {
-		mtx_unlock_spin(&sched_lock);
+ 	if (n < low && suser(td))
 		return (EACCES);
-	}
 	FOREACH_KSEGRP_IN_PROC(p, kg) {
 		sched_nice(kg, n);
 	}
-	mtx_unlock_spin(&sched_lock);
 	return (0);
 }
 

==== //depot/projects/smpng/sys/kern/subr_bus.c#20 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/kern/subr_bus.c,v 1.123 2003/03/03 12:15:51 phk Exp $
+ * $FreeBSD: src/sys/kern/subr_bus.c,v 1.124 2003/03/13 06:29:44 alfred Exp $
  */
 
 #include "opt_bus.h"
@@ -1154,7 +1154,7 @@
 const char *
 device_get_name(device_t dev)
 {
-	if (dev->devclass)
+	if (dev != NULL && dev->devclass)
 		return (devclass_get_name(dev->devclass));
 	return (NULL);
 }

==== //depot/projects/smpng/sys/kern/uipc_mbuf.c#14 (text+ko) ====

@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)uipc_mbuf.c	8.2 (Berkeley) 1/4/94
- * $FreeBSD: src/sys/kern/uipc_mbuf.c,v 1.109 2003/02/19 05:47:26 imp Exp $
+ * $FreeBSD: src/sys/kern/uipc_mbuf.c,v 1.110 2003/03/13 09:02:19 iedowse Exp $
  */
 
 #include "opt_mac.h"
@@ -129,7 +129,8 @@
 	mac_create_mbuf_from_mbuf(from, to);
 #endif
 	SLIST_INIT(&to->m_pkthdr.tags);
-	return (m_tag_copy_chain(to, from, how));
+	return (m_tag_copy_chain(to, from, (how & M_TRYWAIT) ? M_WAITOK :
+	    M_NOWAIT));
 }
 
 /*

==== //depot/projects/smpng/sys/kern/vfs_bio.c#37 (text+ko) ====

@@ -11,7 +11,7 @@
  * 2. Absolutely no warranty of function or purpose is made by the author
  *		John S. Dyson.
  *
- * $FreeBSD: src/sys/kern/vfs_bio.c,v 1.376 2003/03/04 00:04:42 jeff Exp $
+ * $FreeBSD: src/sys/kern/vfs_bio.c,v 1.378 2003/03/13 07:31:45 jeff Exp $
  */
 
 /*
@@ -81,7 +81,7 @@
 static void vfs_backgroundwritedone(struct buf *bp);
 static int vfs_bio_clcheck(struct vnode *vp, int size,
 		daddr_t lblkno, daddr_t blkno);
-static int flushbufqueues(void);
+static int flushbufqueues(int flushdeps);
 static void buf_daemon(void);
 void bremfreel(struct buf * bp);
 
@@ -213,6 +213,12 @@
 static struct mtx nblock;
 
 /*
+ * Lock that protects against bwait()/bdone()/B_DONE races.
+ */
+
+static struct mtx bdonelock;
+
+/*
  * Definitions for the buffer free lists.

>>> 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?200303131902.h2DJ2PfP078112>