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, ¶ms, - req->req_pbuf + MPT_RQSL(mpt), + error = mpt_issue_cfg_req(mpt, req, ¶ms, 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, ¶ms, - req->req_pbuf + MPT_RQSL(mpt), + error = mpt_issue_cfg_req(mpt, req, ¶ms, 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, ¶ms, - req->req_pbuf + MPT_RQSL(mpt), + error = mpt_issue_cfg_req(mpt, req, ¶ms, 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>