Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Jul 2008 01:24:01 GMT
From:      Julian Elischer <julian@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 144527 for review
Message-ID:  <200807030124.m631O1om042445@repoman.freebsd.org>

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

Change 144527 by julian@julian_trafmon1 on 2008/07/03 01:23:07

	IFC@144523

Affected files ...

.. //depot/projects/vimage-commit2/src/sys/amd64/amd64/pmap.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/amd64/include/pmap.h#3 integrate
.. //depot/projects/vimage-commit2/src/sys/amd64/include/vmparam.h#3 integrate
.. //depot/projects/vimage-commit2/src/sys/boot/i386/boot2/boot2.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/compat/pecoff/imgact_pecoff.c#2 delete
.. //depot/projects/vimage-commit2/src/sys/compat/pecoff/imgact_pecoff.h#2 delete
.. //depot/projects/vimage-commit2/src/sys/dev/ce/ceddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ce/if_ce.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cp/cpddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cp/if_cp.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ctau/ctddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ctau/if_ct.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cx/cxddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cx/if_cx.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mii/rgephy.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mii/rgephyreg.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_pci.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_user.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/re/if_re.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/sound/pci/atiixp.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/fs/smbfs/smbfs_node.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/geom/virstor/g_virstor.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/kern_alq.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/uipc_socket.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/modules/pecoff/Makefile#2 delete
.. //depot/projects/vimage-commit2/src/sys/net/if_bridge.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/udp_usrreq.c#6 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet6/ip6_input.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_syscalls.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/pci/if_rlreg.h#3 integrate
.. //depot/projects/vimage-commit2/src/sys/sys/socketvar.h#2 integrate

Differences ...

==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/pmap.c#4 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.623 2008/06/21 19:19:09 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.624 2008/07/02 05:41:23 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -173,7 +173,6 @@
 vm_offset_t virtual_avail;	/* VA of first avail page (after kernel bss) */
 vm_offset_t virtual_end;	/* VA of last avail page (end of kernel AS) */
 
-static int nkpt;
 static int ndmpdp;
 static vm_paddr_t dmaplimit;
 vm_offset_t kernel_vm_end;
@@ -543,7 +542,6 @@
 	kernel_pmap->pm_root = NULL;
 	kernel_pmap->pm_active = -1;	/* don't allow deactivation */
 	TAILQ_INIT(&kernel_pmap->pm_pvchunk);
-	nkpt = NKPT;
 
 	/*
 	 * Reserve some special page table entries/VA space for temporary
@@ -650,7 +648,7 @@
 	 * page table pages.
 	 */ 
 	pd = pmap_pde(kernel_pmap, VM_MIN_KERNEL_ADDRESS);
-	for (i = 0; i < nkpt; i++) {
+	for (i = 0; i < NKPT; i++) {
 		if ((pd[i] & (PG_PS | PG_V)) == (PG_PS | PG_V))
 			continue;
 		mpte = PHYS_TO_VM_PAGE(pd[i] & PG_FRAME);
@@ -1708,10 +1706,8 @@
 	mtx_assert(&kernel_map->system_mtx, MA_OWNED);
 	if (kernel_vm_end == 0) {
 		kernel_vm_end = VM_MIN_KERNEL_ADDRESS;
-		nkpt = 0;
 		while ((*pmap_pde(kernel_pmap, kernel_vm_end) & PG_V) != 0) {
 			kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
-			nkpt++;
 			if (kernel_vm_end - 1 >= kernel_map->max_offset) {
 				kernel_vm_end = kernel_map->max_offset;
 				break;                       
@@ -1725,7 +1721,7 @@
 		pde = pmap_pde(kernel_pmap, kernel_vm_end);
 		if (pde == NULL) {
 			/* We need a new PDP entry */
-			nkpg = vm_page_alloc(NULL, nkpt,
+			nkpg = vm_page_alloc(NULL, kernel_vm_end >> PDPSHIFT,
 			    VM_ALLOC_NOOBJ | VM_ALLOC_SYSTEM | VM_ALLOC_WIRED);
 			if (nkpg == NULL)
 				panic("pmap_growkernel: no memory to grow kernel");
@@ -1749,9 +1745,6 @@
 		    VM_ALLOC_NOOBJ | VM_ALLOC_SYSTEM | VM_ALLOC_WIRED);
 		if (nkpg == NULL)
 			panic("pmap_growkernel: no memory to grow kernel");
-
-		nkpt++;
-
 		pmap_zero_page(nkpg);
 		paddr = VM_PAGE_TO_PHYS(nkpg);
 		newpdir = (pd_entry_t) (paddr | PG_V | PG_RW | PG_A | PG_M);

==== //depot/projects/vimage-commit2/src/sys/amd64/include/pmap.h#3 (text+ko) ====

@@ -39,7 +39,7 @@
  *
  *	from: hp300: @(#)pmap.h	7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.142 2008/06/29 19:13:27 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.143 2008/06/30 02:35:55 alc Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -115,7 +115,7 @@
 #endif
 
 #define NKPML4E		1		/* number of kernel PML4 slots */
-#define NKPDPE		5		/* number of kernel PDP slots */
+#define NKPDPE		howmany(NKPT, NPDEPG)/* number of kernel PDP slots */
 
 #define	NUPML4E		(NPML4EPG/2)	/* number of userland PML4 pages */
 #define	NUPDPE		(NUPML4E*NPDPEPG)/* number of userland PDP pages */

==== //depot/projects/vimage-commit2/src/sys/amd64/include/vmparam.h#3 (text+ko) ====

@@ -38,7 +38,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)vmparam.h	5.9 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.52 2008/06/29 19:13:27 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.53 2008/06/30 03:14:39 alc Exp $
  */
 
 
@@ -148,8 +148,18 @@
 /*
  * Virtual addresses of things.  Derived from the page directory and
  * page table indexes from pmap.h for precision.
- * Because of the page that is both a PD and PT, it looks a little
- * messy at times, but hey, we'll do anything to save a page :-)
+ *
+ * 0x0000000000000000 - 0x00007fffffffffff   user map
+ * 0x0000800000000000 - 0xffff7fffffffffff   does not exist (hole)
+ * 0xffff800000000000 - 0xffff804020100fff   recursive page table (512GB slot)
+ * 0xffff804020101000 - 0xfffffeffffffffff   unused
+ * 0xffffff0000000000 - 0xffffff7fffffffff   512GB direct map mappings
+ * 0xffffff8000000000 - 0xfffffffe7fffffff   unused (506GB)
+ * 0xfffffffe80000000 - 0xffffffffffffffff   6GB kernel map
+ *
+ * Within the kernel map:
+ *
+ * 0xffffffff80000000                        KERNBASE
  */
 
 #define	VM_MAX_KERNEL_ADDRESS	KVADDR(KPML4I, NPDPEPG-1, NPDEPG-1, NPTEPG-1)

==== //depot/projects/vimage-commit2/src/sys/boot/i386/boot2/boot2.c#2 (text+ko) ====

@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.86 2008/02/28 17:08:05 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.87 2008/07/01 11:18:51 nyan Exp $");
 
 #include <sys/param.h>
 #include <sys/disklabel.h>
@@ -472,7 +472,7 @@
 		dsk.slice = WHOLE_DISK_SLICE;
 		if (arg[1] == ',') {
 		    dsk.slice = *arg - '0' + 1;
-		    if (dsk.slice > NDOSPART)
+		    if (dsk.slice > NDOSPART + 1)
 			return -1;
 		    arg += 2;
 		}

==== //depot/projects/vimage-commit2/src/sys/dev/ce/ceddk.h#2 (text+ko) ====

@@ -13,7 +13,7 @@
  * works or modified versions.
  *
  * $Cronyx: ceddk.h,v 1.2.6.1 2005/11/09 13:01:39 rik Exp $
- * $FreeBSD: src/sys/dev/ce/ceddk.h,v 1.1 2006/01/27 09:02:09 rik Exp $
+ * $FreeBSD: src/sys/dev/ce/ceddk.h,v 1.2 2008/06/30 21:18:27 rik Exp $
  */
 
 #define TAU32_UserContext_Add	void	*sys;
@@ -72,6 +72,7 @@
 	TAU32_UserRequest *rx_queue;
 	TAU32_UserRequest *tx_queue;
 	unsigned char debug;
+	unsigned char debug_shadow;
 	void (*transmit) (struct _ce_chan_t*, void*, int);
 	void (*receive) (struct _ce_chan_t*, unsigned char*, int);
 	void (*error) (struct _ce_chan_t*, int);

==== //depot/projects/vimage-commit2/src/sys/dev/ce/if_ce.c#2 (text+ko) ====

@@ -16,7 +16,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ce/if_ce.c,v 1.9 2007/07/27 11:59:56 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ce/if_ce.c,v 1.11 2008/07/01 14:41:03 dds Exp $");
 
 #include <sys/param.h>
 
@@ -962,8 +962,8 @@
 
 	if (! (ifp->if_flags & IFF_DEBUG))
 		d->chan->debug = 0;
-	else if (! d->chan->debug)
-		d->chan->debug = 1;
+	else
+		d->chan->debug = d->chan->debug_shadow;
 
 	switch (cmd) {
 	default:	   CE_DEBUG2 (d, ("ioctl 0x%lx\n", cmd));   return 0;
@@ -1333,7 +1333,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1374,7 +1374,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1404,7 +1404,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1424,7 +1424,7 @@
 		CE_DEBUG2 (d, ("ioctl: setcfg\n"));
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1526,7 +1526,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1562,7 +1562,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1590,7 +1590,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1614,19 +1614,24 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
 #endif
 		if (error)
 			return error;
+#ifndef	NETGRAPH
+		/*
+		 * The debug_shadow is always greater than zero for logic 
+		 * simplicity.  For switching debug off the IFF_DEBUG is
+		 * responsible.
+		 */
+		d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+		if (d->ifp->if_flags & IFF_DEBUG)
+			d->chan->debug = d->chan->debug_shadow;
+#else
 		d->chan->debug = *(int*)data;
-#ifndef	NETGRAPH
-		if (d->chan->debug)
-			d->ifp->if_flags |= IFF_DEBUG;
-		else
-			d->ifp->if_flags &= ~IFF_DEBUG;
 #endif
 		return 0;
 
@@ -1642,7 +1647,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1668,7 +1673,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1698,7 +1703,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1722,7 +1727,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1750,7 +1755,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1776,7 +1781,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1804,7 +1809,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1832,7 +1837,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1860,7 +1865,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1893,7 +1898,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1920,7 +1925,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1939,7 +1944,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);
@@ -1977,7 +1982,7 @@
 		/* Only for superuser! */
 #if __FreeBSD_version < 500000
 		error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
 		error = suser (td);
 #else
 		error = priv_check (td, PRIV_DRIVER);

==== //depot/projects/vimage-commit2/src/sys/dev/cp/cpddk.h#2 (text+ko) ====

@@ -16,7 +16,7 @@
  * works or modified versions.
  *
  * $Cronyx: cpddk.h,v 1.8.4.20 2004/12/06 16:21:06 rik Exp $
- * $FreeBSD: src/sys/dev/cp/cpddk.h,v 1.4 2005/01/06 01:42:32 imp Exp $
+ * $FreeBSD: src/sys/dev/cp/cpddk.h,v 1.5 2008/06/30 21:18:27 rik Exp $
  */
 #define NBRD		6	/* the maximum number of installed boards */
 #define NCHAN		4	/* the number of channels on the board */
@@ -205,6 +205,7 @@
 	void *tag [NTBUF];		/* system dependent data per buffer */
 	void *sys;			/* system dependent data per channel */
 	unsigned char debug;		/* debug level, 0..2 */
+	unsigned char debug_shadow;	/* debug shadow */
 
 	void (*transmit) (struct _cp_chan_t *c, void *tag, int len);
 	void (*receive) (struct _cp_chan_t *c, unsigned char *data, int len);

==== //depot/projects/vimage-commit2/src/sys/dev/cp/if_cp.c#2 (text+ko) ====

@@ -22,7 +22,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.34 2007/07/27 11:59:56 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.35 2008/06/30 21:18:27 rik Exp $");
 
 #include <sys/param.h>
 #include <sys/ucred.h>
@@ -733,8 +733,8 @@
 
 	if (! (ifp->if_flags & IFF_DEBUG))
 		d->chan->debug = 0;
-	else if (! d->chan->debug)
-		d->chan->debug = 1;
+	else
+		d->chan->debug = d->chan->debug_shadow;
 
 	switch (cmd) {
 	default:	   CP_DEBUG2 (d, ("ioctl 0x%lx\n", cmd));   return 0;
@@ -1349,12 +1349,17 @@
 		error = priv_check (td, PRIV_DRIVER);
 		if (error)
 			return error;
+#ifndef	NETGRAPH
+		/*
+		 * The debug_shadow is always greater than zero for logic 
+		 * simplicity.  For switching debug off the IFF_DEBUG is
+		 * responsible.
+		 */
+		d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+		if (d->ifp->if_flags & IFF_DEBUG)
+			d->chan->debug = d->chan->debug_shadow;
+#else
 		d->chan->debug = *(int*)data;
-#ifndef	NETGRAPH
-		if (d->chan->debug)
-			d->ifp->if_flags |= IFF_DEBUG;
-		else
-			d->ifp->if_flags &= ~IFF_DEBUG;
 #endif
 		return 0;
 

==== //depot/projects/vimage-commit2/src/sys/dev/ctau/ctddk.h#2 (text+ko) ====

@@ -12,7 +12,7 @@
  * all derivative works or modified versions.
  *
  * Cronyx Id: ctddk.h,v 1.1.2.3 2003/12/11 17:33:44 rik Exp $
- * $FreeBSD: src/sys/dev/ctau/ctddk.h,v 1.2 2005/01/06 01:42:33 imp Exp $
+ * $FreeBSD: src/sys/dev/ctau/ctddk.h,v 1.3 2008/06/30 21:18:27 rik Exp $
  */
 #define NBRD		3	/* the maximum number of installed boards */
 #define NPORT		32	/* the number of i/o ports per board */
@@ -412,6 +412,7 @@
 	void *attach [NBUF];		/* system dependent data per buffer */
 	void *sys;			/* system dependent data per channel */
 	int debug;
+	int debug_shadow;
 
 	int e1_first_int;
 	unsigned char *sccrx, *scctx;  /* pointers to SCC rx and tx buffers */

==== //depot/projects/vimage-commit2/src/sys/dev/ctau/if_ct.c#2 (text+ko) ====

@@ -22,7 +22,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.35 2007/10/12 06:03:43 kevlo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.36 2008/06/30 21:18:27 rik Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -949,8 +949,8 @@
 
 	if (! (ifp->if_flags & IFF_DEBUG))
 		d->chan->debug = 0;
-	else if (! d->chan->debug)
-		d->chan->debug = 1;
+	else
+		d->chan->debug = d->chan->debug_shadow;
 
 	switch (cmd) {
 	default:	   CT_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1529,12 +1529,17 @@
 		error = priv_check (td, PRIV_DRIVER);
 		if (error)
 			return error;
+#ifndef	NETGRAPH
+		/*
+		 * The debug_shadow is always greater than zero for logic 
+		 * simplicity.  For switching debug off the IFF_DEBUG is
+		 * responsible.
+		 */
+		c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+		if (d->ifp->if_flags & IFF_DEBUG)
+			c->debug = c->debug_shadow;
+#else
 		c->debug = *(int*)data;
-#ifndef	NETGRAPH
-		if (d->chan->debug)
-			d->ifp->if_flags |= IFF_DEBUG;
-		else
-			d->ifp->if_flags &= (~IFF_DEBUG);
 #endif
 		return 0;
 

==== //depot/projects/vimage-commit2/src/sys/dev/cx/cxddk.h#2 (text+ko) ====

@@ -15,7 +15,7 @@
  * all derivative works or modified versions.
  *
  * Cronyx Id: cxddk.h,v 1.1.2.1 2003/11/12 17:13:41 rik Exp $
- * $FreeBSD: src/sys/dev/cx/cxddk.h,v 1.2 2005/01/06 01:42:34 imp Exp $
+ * $FreeBSD: src/sys/dev/cx/cxddk.h,v 1.3 2008/06/30 21:18:27 rik Exp $
  */
 
 #ifndef port_t
@@ -337,6 +337,7 @@
 
 	void *sys;
 	int debug;
+	int debug_shadow;
 	void *attach [2];
 	char *received_data;
 	int received_len;

==== //depot/projects/vimage-commit2/src/sys/dev/cx/if_cx.c#2 (text+ko) ====

@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.58 2007/10/12 06:03:43 kevlo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.59 2008/06/30 21:18:27 rik Exp $");
 
 #include <sys/param.h>
 
@@ -1102,10 +1102,14 @@
 	if (error)
 		return error;
 
+	s = splhigh ();
+	CX_LOCK (bd);
 	if (! (ifp->if_flags & IFF_DEBUG))
 		d->chan->debug = 0;
-	else if (! d->chan->debug)
-		d->chan->debug = 1;
+	else
+		d->chan->debug = d->chan->debug_shadow;
+	CX_UNLOCK (bd);
+	splx (s);
 
 	switch (cmd) {
 	default:	   CX_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1745,6 +1749,8 @@
 			cx_enable_receive (c, 0);
 			cx_enable_transmit (c, 0);
 		} else if (c->mode == M_ASYNC && *(int*)data == SERIAL_HDLC) {
+			if (d->ifp->if_flags & IFF_DEBUG)
+				c->debug = c->debug_shadow;
 			cx_set_mode (c, M_HDLC);
 			cx_enable_receive (c, 1);
 			cx_enable_transmit (c, 1);
@@ -1913,15 +1919,24 @@
 			return error;
 		s = splhigh ();
 		CX_LOCK (bd);
+#ifndef	NETGRAPH
+		if (c->mode == M_ASYNC) {
+			c->debug = *(int*)data;
+		} else {
+			/*
+			 * The debug_shadow is always greater than zero for
+			 * logic simplicity.  For switching debug off the
+			 * IFF_DEBUG is responsible (for !M_ASYNC mode).
+			 */
+			c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+			if (d->ifp->if_flags & IFF_DEBUG)
+				c->debug = c->debug_shadow;
+		}
+#else
 		c->debug = *(int*)data;
+#endif
 		CX_UNLOCK (bd);
 		splx (s);
-#ifndef	NETGRAPH
-		if (d->chan->debug)
-			d->ifp->if_flags |= IFF_DEBUG;
-		else
-			d->ifp->if_flags &= (~IFF_DEBUG);
-#endif
 		return 0;
 	}
 

==== //depot/projects/vimage-commit2/src/sys/dev/mii/rgephy.c#2 (text+ko) ====

@@ -31,10 +31,10 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mii/rgephy.c,v 1.19 2008/03/05 01:15:10 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mii/rgephy.c,v 1.20 2008/07/02 08:10:18 yongari Exp $");
 
 /*
- * Driver for the RealTek 8169S/8110S/8211B internal 10/100/1000 PHY.
+ * Driver for the RealTek 8169S/8110S/8211B/8211C internal 10/100/1000 PHY.
  */
 
 #include <sys/param.h>
@@ -531,6 +531,18 @@
 static void
 rgephy_reset(struct mii_softc *sc)
 {
+	struct rgephy_softc *rsc;
+	uint16_t ssr;
+
+	rsc = (struct rgephy_softc *)sc;
+	if (rsc->mii_revision == 3) {
+		/* RTL8211C(L) */
+		ssr = PHY_READ(sc, RGEPHY_MII_SSR);
+		if ((ssr & RGEPHY_SSR_ALDPS) != 0) {
+			ssr &= ~RGEPHY_SSR_ALDPS;
+			PHY_WRITE(sc, RGEPHY_MII_SSR, ssr);
+		}
+	}
 
 	mii_phy_reset(sc);
 	DELAY(1000);

==== //depot/projects/vimage-commit2/src/sys/dev/mii/rgephyreg.h#2 (text+ko) ====

@@ -29,7 +29,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/mii/rgephyreg.h,v 1.3 2007/10/29 02:17:07 yongari Exp $
+ * $FreeBSD: src/sys/dev/mii/rgephyreg.h,v 1.4 2008/07/02 08:10:18 yongari Exp $
  */
 
 #ifndef _DEV_MII_RGEPHYREG_H_
@@ -137,7 +137,7 @@
 #define RGEPHY_EXTSTS_T_FD_CAP	0x2000	/* 1000base-T FD capable */
 #define RGEPHY_EXTSTS_T_HD_CAP	0x1000	/* 1000base-T HD capable */
 
-/* RTL8211B(L) */
+/* RTL8211B(L)/RTL8211C(L) */
 #define RGEPHY_MII_SSR		0x11	/* PHY Specific status register */
 #define	RGEPHY_SSR_S1000	0x8000	/* 1000Mbps */
 #define	RGEPHY_SSR_S100		0x4000	/* 100Mbps */
@@ -148,6 +148,7 @@
 #define	RGEPHY_SSR_SPD_DPLX_RESOLVED	0x0800	/* speed/duplex resolved */
 #define	RGEPHY_SSR_LINK		0x0400	/* link up */
 #define	RGEPHY_SSR_MDI_XOVER	0x0040	/* MDI crossover */
+#define	RGEPHY_SSR_ALDPS	0x0008	/* RTL8211C(L) only */
 #define	RGEPHY_SSR_JABBER	0x0001	/* Jabber */
 
 #endif /* _DEV_RGEPHY_MIIREG_H_ */

==== //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_pci.c#2 (text+ko) ====

@@ -99,7 +99,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_pci.c,v 1.52 2008/05/10 01:27:23 delphij Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_pci.c,v 1.53 2008/07/01 19:44:38 jhb Exp $");
 
 #include <dev/mpt/mpt.h>
 #include <dev/mpt/mpt_cam.h>
@@ -688,7 +688,7 @@
 		mpt_free_bus_resources(mpt);
 		mpt_raid_free_mem(mpt);
 		if (mpt->eh != NULL) {
-                        EVENTHANDLER_DEREGISTER(shutdown_final, mpt->eh);
+                        EVENTHANDLER_DEREGISTER(shutdown_post_sync, mpt->eh);
 		}
 	}
 	return(0);

==== //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_user.c#2 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_user.c,v 1.1 2008/05/06 20:49:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_user.c,v 1.2 2008/07/01 19:48:15 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -47,6 +47,13 @@
 	uint16_t	action_status;
 };
 
+struct mpt_page_memory {
+	bus_dma_tag_t	tag;
+	bus_dmamap_t	map;
+	bus_addr_t	paddr;
+	void		*vaddr;
+};
+
 static mpt_probe_handler_t	mpt_user_probe;
 static mpt_attach_handler_t	mpt_user_attach;
 static mpt_enable_handler_t	mpt_user_enable;
@@ -180,6 +187,56 @@
 }
 
 static int
+mpt_alloc_buffer(struct mpt_softc *mpt, struct mpt_page_memory *page_mem,
+    size_t len)
+{
+	struct mpt_map_info mi;
+	int error;
+
+	page_mem->vaddr = NULL;
+
+	/* Limit requests to 16M. */
+	if (len > 16 * 1024 * 1024)
+		return (ENOSPC);
+	error = mpt_dma_tag_create(mpt, mpt->parent_dmat, 1, 0,
+	    BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+	    len, 1, len, 0, &page_mem->tag);
+	if (error)
+		return (error);
+	error = bus_dmamem_alloc(page_mem->tag, &page_mem->vaddr,
+	    BUS_DMA_NOWAIT, &page_mem->map);
+	if (error) {
+		bus_dma_tag_destroy(page_mem->tag);
+		return (error);
+	}
+	mi.mpt = mpt;
+	error = bus_dmamap_load(page_mem->tag, page_mem->map, page_mem->vaddr,
+	    len, mpt_map_rquest, &mi, BUS_DMA_NOWAIT);
+	if (error == 0)
+		error = mi.error;
+	if (error) {
+		bus_dmamem_free(page_mem->tag, page_mem->vaddr, page_mem->map);
+		bus_dma_tag_destroy(page_mem->tag);
+		page_mem->vaddr = NULL;
+		return (error);
+	}
+	page_mem->paddr = mi.phys;
+	return (0);
+}
+
+static void
+mpt_free_buffer(struct mpt_page_memory *page_mem)
+{
+
+	if (page_mem->vaddr == NULL)
+		return;
+	bus_dmamap_unload(page_mem->tag, page_mem->map);
+	bus_dmamem_free(page_mem->tag, page_mem->vaddr, page_mem->map);
+	bus_dma_tag_destroy(page_mem->tag);
+	page_mem->vaddr = NULL;
+}
+
+static int
 mpt_user_read_cfg_header(struct mpt_softc *mpt,
     struct mpt_cfg_page_req *page_req)
 {
@@ -225,7 +282,7 @@
 
 static int
 mpt_user_read_cfg_page(struct mpt_softc *mpt, struct mpt_cfg_page_req *page_req,
-    void *mpt_page)
+    struct mpt_page_memory *mpt_page)
 {
 	CONFIG_PAGE_HEADER *hdr;
 	request_t    *req;
@@ -238,15 +295,14 @@
 		return (ENOMEM);
 	}
 
-	hdr = mpt_page;
+	hdr = mpt_page->vaddr;
 	params.Action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
 	params.PageVersion = hdr->PageVersion;
 	params.PageLength = hdr->PageLength;
 	params.PageNumber = hdr->PageNumber;
 	params.PageType = hdr->PageType & MPI_CONFIG_PAGETYPE_MASK;
 	params.PageAddress = page_req->page_address;
-	error = mpt_issue_cfg_req(mpt, req, &params,
-				  req->req_pbuf + MPT_RQSL(mpt),
+	error = mpt_issue_cfg_req(mpt, req, &params, mpt_page->paddr,
 				  page_req->len, TRUE, 5000);
 	if (error != 0) {
 		mpt_prt(mpt, "mpt_user_read_cfg_page timed out\n");
@@ -254,12 +310,9 @@
 	}
 
 	page_req->ioc_status = req->IOCStatus;
-	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS) {
-		bus_dmamap_sync(mpt->request_dmat, mpt->request_dmap,
+	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS)
+		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
 		    BUS_DMASYNC_POSTREAD);
-		memcpy(mpt_page, ((uint8_t *)req->req_vbuf)+MPT_RQSL(mpt),
-		    page_req->len);
-	}
 	mpt_free_request(mpt, req);
 	return (0);
 }
@@ -315,7 +368,7 @@
 
 static int
 mpt_user_read_extcfg_page(struct mpt_softc *mpt,
-    struct mpt_ext_cfg_page_req *ext_page_req, void *mpt_page)
+    struct mpt_ext_cfg_page_req *ext_page_req, struct mpt_page_memory *mpt_page)
 {
 	CONFIG_EXTENDED_PAGE_HEADER *hdr;
 	request_t    *req;
@@ -328,7 +381,7 @@
 		return (ENOMEM);
 	}
 
-	hdr = mpt_page;
+	hdr = mpt_page->vaddr;
 	params.Action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
 	params.PageVersion = hdr->PageVersion;
 	params.PageLength = 0;
@@ -337,8 +390,7 @@
 	params.PageAddress = ext_page_req->page_address;
 	params.ExtPageType = hdr->ExtPageType;
 	params.ExtPageLength = hdr->ExtPageLength;
-	error = mpt_issue_cfg_req(mpt, req, &params,
-				  req->req_pbuf + MPT_RQSL(mpt),
+	error = mpt_issue_cfg_req(mpt, req, &params, mpt_page->paddr,
 				  ext_page_req->len, TRUE, 5000);
 	if (error != 0) {
 		mpt_prt(mpt, "mpt_user_read_extcfg_page timed out\n");
@@ -346,19 +398,16 @@
 	}
 
 	ext_page_req->ioc_status = req->IOCStatus;
-	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS) {
-		bus_dmamap_sync(mpt->request_dmat, mpt->request_dmap,
+	if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS)
+		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
 		    BUS_DMASYNC_POSTREAD);
-		memcpy(mpt_page, ((uint8_t *)req->req_vbuf)+MPT_RQSL(mpt),
-		    ext_page_req->len);
-	}
 	mpt_free_request(mpt, req);
 	return (0);
 }
 
 static int
 mpt_user_write_cfg_page(struct mpt_softc *mpt,
-    struct mpt_cfg_page_req *page_req, void *mpt_page)
+    struct mpt_cfg_page_req *page_req, struct mpt_page_memory *mpt_page)
 {
 	CONFIG_PAGE_HEADER *hdr;
 	request_t    *req;
@@ -366,7 +415,7 @@
 	u_int	      hdr_attr;
 	int	      error;
 
-	hdr = mpt_page;
+	hdr = mpt_page->vaddr;
 	hdr_attr = hdr->PageType & MPI_CONFIG_PAGEATTR_MASK;
 	if (hdr_attr != MPI_CONFIG_PAGEATTR_CHANGEABLE &&
 	    hdr_attr != MPI_CONFIG_PAGEATTR_PERSISTENT) {
@@ -386,8 +435,7 @@
 	if (req == NULL)
 		return (ENOMEM);
 
-	memcpy(((caddr_t)req->req_vbuf) + MPT_RQSL(mpt), mpt_page,
-	    page_req->len);
+	bus_dmamap_sync(mpt_page->tag, mpt_page->map, BUS_DMASYNC_PREWRITE);
 
 	/*
 	 * There isn't any point in restoring stripped out attributes
@@ -406,8 +454,7 @@
 #else
 	params.PageType = hdr->PageType;
 #endif
-	error = mpt_issue_cfg_req(mpt, req, &params,
-				  req->req_pbuf + MPT_RQSL(mpt),
+	error = mpt_issue_cfg_req(mpt, req, &params, mpt_page->paddr,
 				  page_req->len, TRUE, 5000);
 	if (error != 0) {
 		mpt_prt(mpt, "mpt_write_cfg_page timed out\n");
@@ -466,7 +513,7 @@
  */
 static int
 mpt_user_raid_action(struct mpt_softc *mpt, struct mpt_raid_action *raid_act,
-	void *buf)
+	struct mpt_page_memory *mpt_page)
 {
 	request_t *req;
 	struct mpt_user_raid_action_result *res;
@@ -486,12 +533,10 @@
 	rap->VolumeBus = raid_act->volume_bus;
 	rap->PhysDiskNum = raid_act->phys_disk_num;
 	se = (SGE_SIMPLE32 *)&rap->ActionDataSGE;
-	if (buf != 0 && raid_act->len != 0) {
-		memcpy(((caddr_t)req->req_vbuf) + MPT_RQSL(mpt) +
-		    sizeof(struct mpt_user_raid_action_result), buf,
-		    raid_act->len);
-		se->Address = req->req_pbuf + MPT_RQSL(mpt) +
-		    sizeof(struct mpt_user_raid_action_result);
+	if (mpt_page->vaddr != NULL && raid_act->len != 0) {
+		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
+		    BUS_DMASYNC_PREWRITE);
+		se->Address = mpt_page->paddr;
 		MPI_pSGE_SET_LENGTH(se, raid_act->len);
 		MPI_pSGE_SET_FLAGS(se, (MPI_SGE_FLAGS_SIMPLE_ELEMENT |
 		    MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER |
@@ -526,9 +571,9 @@
 	raid_act->action_status = res->action_status;
 	bcopy(res->action_data, raid_act->action_data,
 	    sizeof(res->action_data));
-	if (buf != NULL)
-		memcpy(buf, ((uint8_t *)req->req_vbuf) + MPT_RQSL(mpt) +
-		    sizeof(struct mpt_user_raid_action_result), raid_act->len);
+	if (mpt_page->vaddr != NULL)
+		bus_dmamap_sync(mpt_page->tag, mpt_page->map,
+		    BUS_DMASYNC_POSTREAD);
 	mpt_free_request(mpt, req);
 	return (0);
 }
@@ -545,6 +590,7 @@
 	struct mpt_cfg_page_req *page_req;
 	struct mpt_ext_cfg_page_req *ext_page_req;
 	struct mpt_raid_action *raid_act;
+	struct mpt_page_memory mpt_page;
 #ifdef __amd64__
 	struct mpt_cfg_page_req32 *page_req32;
 	struct mpt_cfg_page_req page_req_swab;
@@ -553,14 +599,13 @@
 	struct mpt_raid_action32 *raid_act32;
 	struct mpt_raid_action raid_act_swab;
 #endif
-	void *mpt_page;
 	int error;
 

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807030124.m631O1om042445>