From owner-p4-projects@FreeBSD.ORG Fri Jun 10 05:17:25 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F3FA616A421; Fri, 10 Jun 2005 05:17:24 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B500316A41C for ; Fri, 10 Jun 2005 05:17:24 +0000 (GMT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 461CB43D1D for ; Fri, 10 Jun 2005 05:17:24 +0000 (GMT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j5A5HOVd013333 for ; Fri, 10 Jun 2005 05:17:24 GMT (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j5A5HNhC013330 for perforce@freebsd.org; Fri, 10 Jun 2005 05:17:23 GMT (envelope-from marcel@freebsd.org) Date: Fri, 10 Jun 2005 05:17:23 GMT Message-Id: <200506100517.j5A5HNhC013330@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Cc: Subject: PERFORCE change 78316 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2005 05:17:25 -0000 http://perforce.freebsd.org/chv.cgi?CH=78316 Change 78316 by marcel@marcel_nfs on 2005/06/10 05:17:03 IFC @78313 Affected files ... .. //depot/projects/tty/lib/libpmc/libpmc.c#4 integrate .. //depot/projects/tty/sbin/dhclient/dhclient-script#2 integrate .. //depot/projects/tty/share/man/man4/dummynet.4#2 integrate .. //depot/projects/tty/share/man/man4/if_bridge.4#3 integrate .. //depot/projects/tty/sys/alpha/alpha/pmap.c#11 integrate .. //depot/projects/tty/sys/amd64/amd64/pmap.c#12 integrate .. //depot/projects/tty/sys/arm/arm/pmap.c#8 integrate .. //depot/projects/tty/sys/i386/i386/pmap.c#16 integrate .. //depot/projects/tty/sys/ia64/ia64/pmap.c#14 integrate .. //depot/projects/tty/sys/kern/kern_switch.c#18 integrate .. //depot/projects/tty/sys/net/if_bridge.c#3 integrate .. //depot/projects/tty/sys/net/if_bridgevar.h#2 integrate .. //depot/projects/tty/sys/net/if_ethersubr.c#15 integrate .. //depot/projects/tty/sys/net80211/ieee80211.h#4 integrate .. //depot/projects/tty/sys/net80211/ieee80211_input.c#8 integrate .. //depot/projects/tty/sys/net80211/ieee80211_node.c#8 integrate .. //depot/projects/tty/sys/net80211/ieee80211_output.c#8 integrate .. //depot/projects/tty/sys/netinet/ip_dummynet.c#12 integrate .. //depot/projects/tty/sys/netinet/ip_dummynet.h#8 integrate .. //depot/projects/tty/sys/powerpc/powerpc/pmap.c#11 integrate .. //depot/projects/tty/sys/security/mac/mac_system.c#4 integrate .. //depot/projects/tty/sys/sparc64/sparc64/pmap.c#11 integrate .. //depot/projects/tty/sys/vm/pmap.h#8 integrate .. //depot/projects/tty/sys/vm/vm_pageq.c#9 integrate Differences ... ==== //depot/projects/tty/lib/libpmc/libpmc.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/lib/libpmc/libpmc.c,v 1.6 2005/06/09 19:45:06 jkoshy Exp $"); +__FBSDID("$FreeBSD: src/lib/libpmc/libpmc.c,v 1.7 2005/06/10 03:45:04 jkoshy Exp $"); #include #include @@ -139,7 +139,8 @@ static int pmc_syscall = -1; /* filled in by pmc_init() */ -struct pmc_op_getcpuinfo cpu_info; /* filled in by pmc_init() */ +static struct pmc_cpuinfo cpu_info; /* filled in by pmc_init() */ + /* Architecture dependent event parsing */ static int (*pmc_mdep_allocate_pmc)(enum pmc_event _pe, char *_ctrspec, @@ -1752,8 +1753,7 @@ return -1; } - /* kernel<->library, library<->userland interfaces are identical */ - *pci = (struct pmc_cpuinfo *) &cpu_info; + *pci = &cpu_info; return 0; } @@ -1893,8 +1893,10 @@ pmc_init(void) { int error, pmc_mod_id; + unsigned int n; uint32_t abi_version; struct module_stat pmc_modstat; + struct pmc_op_getcpuinfo op_cpu_info; if (pmc_syscall != -1) /* already inited */ return 0; @@ -1920,9 +1922,16 @@ return (pmc_syscall = -1); } - if (PMC_CALL(GETCPUINFO, &cpu_info) < 0) + if (PMC_CALL(GETCPUINFO, &op_cpu_info) < 0) return (pmc_syscall = -1); + cpu_info.pm_cputype = op_cpu_info.pm_cputype; + cpu_info.pm_ncpu = op_cpu_info.pm_ncpu; + cpu_info.pm_npmc = op_cpu_info.pm_npmc; + cpu_info.pm_nclass = op_cpu_info.pm_nclass; + for (n = 0; n < cpu_info.pm_nclass; n++) + cpu_info.pm_classes[n] = op_cpu_info.pm_classes[n]; + /* set parser pointer */ switch (cpu_info.pm_cputype) { #if defined(__i386__) ==== //depot/projects/tty/sbin/dhclient/dhclient-script#2 (text+ko) ==== @@ -1,7 +1,7 @@ #!/bin/sh # # $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $ -# $FreeBSD: src/sbin/dhclient/dhclient-script,v 1.3 2005/06/08 18:21:56 brooks Exp $ +# $FreeBSD: src/sbin/dhclient/dhclient-script,v 1.4 2005/06/10 03:41:18 brooks Exp $ # # Copyright (c) 2003 Kenneth R Westerback # @@ -186,6 +186,17 @@ # Start of active code. # +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/dhclient-enter-hooks ]; then + exit_status=0 + . /etc/dhclient-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + if [ -x $NETSTAT ]; then if_defaulroute=`$NETSTAT -rn | $GREP "^default" | $AWK '{print $6}'` else ==== //depot/projects/tty/share/man/man4/dummynet.4#2 (text+ko) ==== @@ -1,5 +1,5 @@ .\" -.\" $FreeBSD: src/share/man/man4/dummynet.4,v 1.20 2002/11/29 11:39:19 ru Exp $ +.\" $FreeBSD: src/share/man/man4/dummynet.4,v 1.21 2005/06/10 01:25:22 thompsa Exp $ .\" .Dd October 28, 2002 .Dt DUMMYNET 4 @@ -61,6 +61,7 @@ .Sh SEE ALSO .Xr setsockopt 2 , .Xr bridge 4 , +.Xr if_bridge 4 , .Xr ip 4 , .Xr ipfw 8 , .Xr sysctl 8 ==== //depot/projects/tty/share/man/man4/if_bridge.4#3 (text+ko) ==== @@ -33,7 +33,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man4/if_bridge.4,v 1.2 2005/06/07 21:20:18 thompsa Exp $ +.\" $FreeBSD: src/share/man/man4/if_bridge.4,v 1.3 2005/06/10 01:25:22 thompsa Exp $ .Dd January 4, 2004 .Dt IF_BRIDGE 4 .Os @@ -107,6 +107,9 @@ , set to .Li 0 to disable it. +This needs to be enabled for +.Xr dummynet 4 +support. When ipfw is enabled pfil_bridge and pfil_member will be disabled so that IPFW is not run twice, these can be re-enabled if desired. .El ==== //depot/projects/tty/sys/alpha/alpha/pmap.c#11 (text+ko) ==== @@ -148,7 +148,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.177 2005/01/05 20:05:49 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.178 2005/06/10 03:33:35 alc Exp $"); #include #include @@ -302,7 +302,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 boolean_t pmap_initialized = FALSE; /* Has pmap_init completed? */ static int nklev3, nklev2; vm_offset_t kernel_vm_end; @@ -554,29 +553,24 @@ } /* + * Initialize a vm_page's machine-dependent fields. + */ +void +pmap_page_init(vm_page_t m) +{ + + TAILQ_INIT(&m->md.pv_list); + m->md.pv_list_count = 0; +} + +/* * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. - * pmap_init has been enhanced to support in a fairly consistant - * way, discontiguous physical memory. */ void pmap_init(void) { - int i; - - /* - * Allocate memory for random pmap data structures. Includes the - * pv_head_table. - */ - - for(i = 0; i < vm_page_array_size; i++) { - vm_page_t m; - - m = &vm_page_array[i]; - TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; - } /* * init the pv free list @@ -584,11 +578,6 @@ pvzone = uma_zcreate("PV ENTRY", sizeof (struct pv_entry), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM | UMA_ZONE_NOFREE); uma_prealloc(pvzone, MINPV); - - /* - * Now it is safe to enable pv_table recording. - */ - pmap_initialized = TRUE; } /* @@ -1516,7 +1505,7 @@ * XXX this makes pmap_page_protect(NONE) illegal for non-managed * pages! */ - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) { + if (m->flags & PG_FICTITIOUS) { panic("pmap_page_protect: illegal for unmanaged page, va: 0x%lx", VM_PAGE_TO_PHYS(m)); } #endif @@ -1745,8 +1734,7 @@ * raise IPL while manipulating pv_table since pmap_enter can be * called at interrupt time. */ - if (pmap_initialized && - (m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) { + if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { pmap_insert_entry(pmap, va, mpte, m); managed |= PG_MANAGED; } @@ -2056,7 +2044,7 @@ pv_entry_t pv; int loops = 0; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return FALSE; /* @@ -2162,7 +2150,7 @@ pt_entry_t *pte; int changed; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS) || + if ((m->flags & PG_FICTITIOUS) || (!setem && bit == (PG_UWE|PG_KWE) && (m->flags & PG_WRITEABLE) == 0)) return; @@ -2247,7 +2235,7 @@ pt_entry_t *pte; int count; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return 0; /* @@ -2285,7 +2273,7 @@ boolean_t rv; rv = FALSE; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (rv); /* @@ -2335,7 +2323,7 @@ pv_entry_t pv; pt_entry_t *pte; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return; /* @@ -2364,7 +2352,7 @@ pv_entry_t pv; pt_entry_t *pte; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return; /* ==== //depot/projects/tty/sys/amd64/amd64/pmap.c#12 (text+ko) ==== @@ -75,7 +75,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.515 2005/02/05 19:21:54 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.516 2005/06/10 03:33:35 alc Exp $"); /* * Manages physical address maps. @@ -165,7 +165,6 @@ vm_paddr_t avail_end; /* PA of last available physical page */ 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 boolean_t pmap_initialized = FALSE; /* Has pmap_init completed? */ static int nkpt; static int ndmpdp; @@ -531,29 +530,24 @@ } /* + * Initialize a vm_page's machine-dependent fields. + */ +void +pmap_page_init(vm_page_t m) +{ + + TAILQ_INIT(&m->md.pv_list); + m->md.pv_list_count = 0; +} + +/* * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. - * pmap_init has been enhanced to support in a fairly consistant - * way, discontiguous physical memory. */ void pmap_init(void) { - int i; - - /* - * Allocate memory for random pmap data structures. Includes the - * pv_head_table. - */ - - for(i = 0; i < vm_page_array_size; i++) { - vm_page_t m; - - m = &vm_page_array[i]; - TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; - } /* * init the pv free list @@ -561,11 +555,6 @@ pvzone = uma_zcreate("PV ENTRY", sizeof (struct pv_entry), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM | UMA_ZONE_NOFREE); uma_prealloc(pvzone, MINPV); - - /* - * Now it is safe to enable pv_table recording. - */ - pmap_initialized = TRUE; } /* @@ -1675,7 +1664,7 @@ /* * XXX This makes pmap_remove_all() illegal for non-managed pages! */ - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) { + if (m->flags & PG_FICTITIOUS) { panic("pmap_remove_all: illegal for unmanaged page, va: 0x%lx", VM_PAGE_TO_PHYS(m)); } @@ -1955,8 +1944,7 @@ * raise IPL while manipulating pv_table since pmap_enter can be * called at interrupt time. */ - if (pmap_initialized && - (m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) { + if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { pmap_insert_entry(pmap, va, m); pa |= PG_MANAGED; } @@ -2449,7 +2437,7 @@ pv_entry_t pv; int loops = 0; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return FALSE; mtx_assert(&vm_page_queue_mtx, MA_OWNED); @@ -2567,7 +2555,7 @@ boolean_t rv; rv = FALSE; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (rv); mtx_assert(&vm_page_queue_mtx, MA_OWNED); @@ -2628,7 +2616,7 @@ register pv_entry_t pv; pt_entry_t pbits, *pte; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS) || + if ((m->flags & PG_FICTITIOUS) || (bit == PG_RW && (m->flags & PG_WRITEABLE) == 0)) return; @@ -2713,7 +2701,7 @@ pt_entry_t v; int rtval = 0; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (rtval); mtx_assert(&vm_page_queue_mtx, MA_OWNED); ==== //depot/projects/tty/sys/arm/arm/pmap.c#8 (text+ko) ==== @@ -147,7 +147,7 @@ #include "opt_vm.h" #include -__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.32 2005/06/07 23:04:24 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.33 2005/06/10 03:33:35 alc Exp $"); #include #include #include @@ -1927,33 +1927,28 @@ bcopy(kernel_pmap, pmap, sizeof(*pmap)); } +/* + * Initialize a vm_page's machine-dependent fields. + */ +void +pmap_page_init(vm_page_t m) +{ + + TAILQ_INIT(&m->md.pv_list); + m->md.pv_list_count = 0; +} /* * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. - * pmap_init has been enhanced to support in a fairly consistant - * way, discontiguous physical memory. */ void pmap_init(void) { - int i; PDEBUG(1, printf("pmap_init: phys_start = %08x\n")); - /* - * Allocate memory for random pmap data structures. Includes the - * pv_head_table. - */ - - for(i = 0; i < vm_page_array_size; i++) { - vm_page_t m; - m = &vm_page_array[i]; - TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; - } - /* * init the pv free list */ @@ -3156,7 +3151,7 @@ * XXX this makes pmap_page_protect(NONE) illegal for non-managed * pages! */ - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) { + if (m->flags & PG_FICTITIOUS) { panic("pmap_page_protect: illegal for unmanaged page, va: 0x%x", VM_PAGE_TO_PHYS(m)); } #endif @@ -4331,7 +4326,7 @@ int loops = 0; int s; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (FALSE); s = splvm(); ==== //depot/projects/tty/sys/i386/i386/pmap.c#16 (text+ko) ==== @@ -73,7 +73,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.521 2005/02/05 19:21:54 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.522 2005/06/10 03:33:35 alc Exp $"); /* * Manages physical address maps. @@ -190,7 +190,6 @@ vm_paddr_t avail_end; /* PA of last available physical page */ 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 boolean_t pmap_initialized = FALSE; /* Has pmap_init completed? */ int pgeflag = 0; /* PG_G or-in */ int pseflag = 0; /* PG_PS or-in */ @@ -443,6 +442,17 @@ } } +/* + * Initialize a vm_page's machine-dependent fields. + */ +void +pmap_page_init(vm_page_t m) +{ + + TAILQ_INIT(&m->md.pv_list); + m->md.pv_list_count = 0; +} + #ifdef PAE static MALLOC_DEFINE(M_PMAPPDPT, "pmap", "pmap pdpt"); @@ -460,26 +470,10 @@ * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. - * pmap_init has been enhanced to support in a fairly consistant - * way, discontiguous physical memory. */ void pmap_init(void) { - int i; - - /* - * Allocate memory for random pmap data structures. Includes the - * pv_head_table. - */ - - for(i = 0; i < vm_page_array_size; i++) { - vm_page_t m; - - m = &vm_page_array[i]; - TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; - } /* * init the pv free list @@ -494,11 +488,6 @@ UMA_ZONE_VM | UMA_ZONE_NOFREE); uma_zone_set_allocf(pdptzone, pmap_pdpt_allocf); #endif - - /* - * Now it is safe to enable pv_table recording. - */ - pmap_initialized = TRUE; } /* @@ -1714,7 +1703,7 @@ /* * XXX This makes pmap_remove_all() illegal for non-managed pages! */ - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) { + if (m->flags & PG_FICTITIOUS) { panic("pmap_remove_all: illegal for unmanaged page, va: 0x%x", VM_PAGE_TO_PHYS(m)); } @@ -1997,8 +1986,7 @@ * raise IPL while manipulating pv_table since pmap_enter can be * called at interrupt time. */ - if (pmap_initialized && - (m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) { + if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { pmap_insert_entry(pmap, va, m); pa |= PG_MANAGED; } @@ -2525,7 +2513,7 @@ pv_entry_t pv; int loops = 0; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return FALSE; mtx_assert(&vm_page_queue_mtx, MA_OWNED); @@ -2645,7 +2633,7 @@ boolean_t rv; rv = FALSE; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (rv); sched_pin(); @@ -2708,7 +2696,7 @@ register pv_entry_t pv; pt_entry_t pbits, *pte; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS) || + if ((m->flags & PG_FICTITIOUS) || (bit == PG_RW && (m->flags & PG_WRITEABLE) == 0)) return; @@ -2800,7 +2788,7 @@ pt_entry_t v; int rtval = 0; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (rtval); sched_pin(); ==== //depot/projects/tty/sys/ia64/ia64/pmap.c#14 (text+ko) ==== @@ -46,7 +46,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.159 2005/04/16 23:38:32 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.160 2005/06/10 03:33:36 alc Exp $"); #include #include @@ -154,7 +154,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 boolean_t pmap_initialized = FALSE; /* Has pmap_init completed? */ vm_offset_t vhpt_base, vhpt_size; struct mtx pmap_vhptmutex; @@ -444,31 +443,26 @@ } /* + * Initialize a vm_page's machine-dependent fields. + */ +void +pmap_page_init(vm_page_t m) +{ + + TAILQ_INIT(&m->md.pv_list); + m->md.pv_list_count = 0; +} + +/* * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. - * pmap_init has been enhanced to support in a fairly consistant - * way, discontiguous physical memory. */ void pmap_init(void) { - int i; /* - * Allocate memory for random pmap data structures. Includes the - * pv_head_table. - */ - - for(i = 0; i < vm_page_array_size; i++) { - vm_page_t m; - - m = &vm_page_array[i]; - TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; - } - - /* * Init the pv free list and the PTE free list. */ pvzone = uma_zcreate("PV ENTRY", sizeof (struct pv_entry), @@ -478,11 +472,6 @@ ptezone = uma_zcreate("PT ENTRY", sizeof (struct ia64_lpte), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM|UMA_ZONE_NOFREE); uma_prealloc(ptezone, MINPV); - - /* - * Now it is safe to enable pv_table recording. - */ - pmap_initialized = TRUE; } /* @@ -1391,7 +1380,7 @@ * XXX this makes pmap_page_protect(NONE) illegal for non-managed * pages! */ - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) { + if (m->flags & PG_FICTITIOUS) { panic("pmap_page_protect: illegal for unmanaged page, va: 0x%lx", VM_PAGE_TO_PHYS(m)); } #endif @@ -1572,8 +1561,7 @@ /* * Enter on the PV list if part of our managed memory. */ - if (pmap_initialized && - (m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { + if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { pmap_insert_entry(pmap, va, m); managed = TRUE; } @@ -1648,8 +1636,7 @@ /* * Enter on the PV list since its part of our managed memory. */ - if (pmap_initialized && - (m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { + if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) { pmap_insert_entry(pmap, va, m); managed = TRUE; } @@ -1809,7 +1796,7 @@ int loops = 0; int s; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return FALSE; s = splvm(); @@ -1932,7 +1919,7 @@ pv_entry_t pv; int count = 0; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return 0; TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { @@ -1965,7 +1952,7 @@ { pv_entry_t pv; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return FALSE; TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { @@ -1996,7 +1983,7 @@ boolean_t rv; rv = FALSE; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return (rv); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { @@ -2041,7 +2028,7 @@ pmap_t oldpmap; pv_entry_t pv; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return; TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { @@ -2071,7 +2058,7 @@ pmap_t oldpmap; pv_entry_t pv; - if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) + if (m->flags & PG_FICTITIOUS) return; TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { ==== //depot/projects/tty/sys/kern/kern_switch.c#18 (text+ko) ==== @@ -86,7 +86,7 @@ ***/ #include -__FBSDID("$FreeBSD: src/sys/kern/kern_switch.c,v 1.115 2005/06/09 19:43:08 ups Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_switch.c,v 1.116 2005/06/10 03:00:29 ups Exp $"); #include "opt_sched.h" @@ -675,11 +675,9 @@ TD_IS_INHIBITED(ctd) || td->td_kse->ke_state != KES_THREAD) return (0); #ifndef FULL_PREEMPTION - if (pri > PRI_MAX_ITHD) + if (pri > PRI_MAX_ITHD && cpri < PRI_MIN_IDLE) return (0); #endif - if (cpri >= PRI_MIN_IDLE) - return (0); if (ctd->td_critnest > 1) { CTR1(KTR_PROC, "maybe_preempt: in critical section %d", ==== //depot/projects/tty/sys/net/if_bridge.c#3 (text+ko) ==== @@ -80,7 +80,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/net/if_bridge.c,v 1.3 2005/06/07 21:20:18 thompsa Exp $"); +__FBSDID("$FreeBSD: src/sys/net/if_bridge.c,v 1.4 2005/06/10 01:25:21 thompsa Exp $"); #include "opt_inet.h" #include "opt_inet6.h" @@ -129,7 +129,6 @@ #include #include #include -#include #define sc_if ifb_ac.ac_if /* @@ -178,6 +177,7 @@ extern struct mbuf *(*bridge_input_p)(struct ifnet *, struct mbuf *); extern int (*bridge_output_p)(struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *); +extern void (*bridge_dn_p)(struct mbuf *, struct ifnet *); int bridge_rtable_prune_period = BRIDGE_RTABLE_PRUNE_PERIOD; @@ -351,6 +351,7 @@ LIST_INIT(&bridge_list); bridge_input_p = bridge_input; bridge_output_p = bridge_output; + bridge_dn_p = bridge_dummynet; bstp_linkstate_p = bstp_linkstate; break; case MOD_UNLOAD: @@ -360,6 +361,7 @@ uma_zdestroy(bridge_rtnode_zone); bridge_input_p = NULL; bridge_output_p = NULL; + bridge_dn_p = NULL; bstp_linkstate_p = NULL; mtx_destroy(&bridge_list_mtx); break; @@ -1271,6 +1273,33 @@ } /* + * bridge_dummynet: + * + * Receive a queued packet from dummynet and pass it on to the output + * interface. + * + * The mbuf has the Ethernet header already attached. + */ +void +bridge_dummynet(struct mbuf *m, struct ifnet *ifp) +{ + struct bridge_softc *sc; + + sc = ifp->if_bridge; + + /* + * The packet didnt originate from a member interface. This should only + * ever happen if a member interface is removed while packets are + * queued for it. + */ + if (sc == NULL) + m_freem(m); + return; + + bridge_enqueue(sc, ifp, m, 1); +} + +/* * bridge_output: * * Send output from a bridge member interface. This @@ -2195,7 +2224,7 @@ # endif /* INET6 */ break; default: - /* + /* * ipfw allows layer2 protocol filtering using * 'mac-type' so we will let the packet past, if * ipfw is disabled then drop it. @@ -2214,6 +2243,43 @@ m_adj(*mp, sizeof(struct llc)); } + if (IPFW_LOADED && pfil_ipfw != 0 && dir == PFIL_OUT) { + args.rule = ip_dn_claim_rule(*mp); + if (args.rule != NULL && fw_one_pass) + goto ipfwpass; /* packet already partially processed */ + + args.m = *mp; + args.oif = ifp; + args.next_hop = NULL; + args.eh = &eh2; + i = ip_fw_chk_ptr(&args); + *mp = args.m; + + if (*mp == NULL) + return error; + + if (DUMMYNET_LOADED && (i == IP_FW_DUMMYNET)) { + + /* put the Ethernet header back on */ + M_PREPEND(*mp, ETHER_HDR_LEN, M_DONTWAIT); + if (*mp == NULL) + return error; + bcopy(&eh2, mtod(*mp, caddr_t), ETHER_HDR_LEN); + + /* + * Pass the pkt to dummynet, which consumes it. The + * packet will return to us via bridge_dummynet(). + */ + args.oif = ifp; + ip_dn_io_ptr(*mp, DN_TO_IFB_FWD, &args); + return error; + } + + if (i != IP_FW_PASS) /* drop */ + goto bad; + } + +ipfwpass: /* * Check basic packet sanity and run pfil through pfil. */ @@ -2246,10 +2312,16 @@ error = pfil_run_hooks(&inet_pfil_hook, mp, bifp, dir, NULL); + if (*mp == NULL) /* filter may consume */ + break; + if (error == 0 && pfil_member) error = pfil_run_hooks(&inet_pfil_hook, mp, ifp, dir, NULL); + if (*mp == NULL) /* filter may consume */ + break; + if (error == 0 && pfil_bridge && dir == PFIL_IN) error = pfil_run_hooks(&inet_pfil_hook, mp, bifp, dir, NULL); @@ -2270,10 +2342,16 @@ error = pfil_run_hooks(&inet6_pfil_hook, mp, bifp, dir, NULL); + if (*mp == NULL) /* filter may consume */ + break; + if (error == 0 && pfil_member) error = pfil_run_hooks(&inet6_pfil_hook, mp, ifp, dir, NULL); + if (*mp == NULL) /* filter may consume */ + break; + if (error == 0 && pfil_bridge && dir == PFIL_IN) error = pfil_run_hooks(&inet6_pfil_hook, mp, bifp, dir, NULL); @@ -2291,22 +2369,6 @@ error = -1; - if (IPFW_LOADED && pfil_ipfw != 0) { - args.m = *mp; - args.oif = NULL; - args.next_hop = NULL; - args.rule = NULL; >>> TRUNCATED FOR MAIL (1000 lines) <<<