Date: Fri, 5 Mar 2004 18:08:35 -0800 (PST) From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 48264 for review Message-ID: <200403060208.i2628ZPJ067600@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=48264 Change 48264 by rwatson@rwatson_none5 on 2004/03/05 18:08:00 Integrate netperf_socket branch to CVS HEAD: Kernel thread exit no longer requires exit. Giant pushed down in exec, fork, exit. Back out of mlock/vslock changes. roundrobin_callout in sched_4bsd now MPSAFE. userret ast sanity test moved from INVARIANTS to DIAGNOSTIC. Affected files ... .. //depot/projects/netperf_socket/sys/alpha/include/critical.h#2 integrate .. //depot/projects/netperf_socket/sys/amd64/amd64/critical.c#2 integrate .. //depot/projects/netperf_socket/sys/amd64/amd64/identcpu.c#2 integrate .. //depot/projects/netperf_socket/sys/amd64/conf/NOTES#4 integrate .. //depot/projects/netperf_socket/sys/amd64/include/cpufunc.h#3 integrate .. //depot/projects/netperf_socket/sys/amd64/include/critical.h#2 integrate .. //depot/projects/netperf_socket/sys/compat/ndis/kern_ndis.c#3 integrate .. //depot/projects/netperf_socket/sys/conf/options.amd64#4 integrate .. //depot/projects/netperf_socket/sys/dev/aac/aac.c#3 integrate .. //depot/projects/netperf_socket/sys/dev/acpica/acpi_cpu.c#3 integrate .. //depot/projects/netperf_socket/sys/dev/acpica/acpi_thermal.c#5 integrate .. //depot/projects/netperf_socket/sys/dev/adlink/adlink.c#3 integrate .. //depot/projects/netperf_socket/sys/dev/md/md.c#5 integrate .. //depot/projects/netperf_socket/sys/dev/pccbb/pccbb.c#2 integrate .. //depot/projects/netperf_socket/sys/dev/random/harvest.c#2 integrate .. //depot/projects/netperf_socket/sys/dev/utopia/utopia.c#2 integrate .. //depot/projects/netperf_socket/sys/geom/bde/g_bde_work.c#3 integrate .. //depot/projects/netperf_socket/sys/i386/conf/NOTES#6 integrate .. //depot/projects/netperf_socket/sys/i386/i386/critical.c#2 integrate .. //depot/projects/netperf_socket/sys/i386/include/cpufunc.h#2 integrate .. //depot/projects/netperf_socket/sys/i386/include/critical.h#2 integrate .. //depot/projects/netperf_socket/sys/ia64/include/critical.h#2 integrate .. //depot/projects/netperf_socket/sys/kern/kern_exec.c#3 integrate .. //depot/projects/netperf_socket/sys/kern/kern_exit.c#3 integrate .. //depot/projects/netperf_socket/sys/kern/kern_fork.c#4 integrate .. //depot/projects/netperf_socket/sys/kern/kern_intr.c#3 integrate .. //depot/projects/netperf_socket/sys/kern/kern_sig.c#4 integrate .. //depot/projects/netperf_socket/sys/kern/kern_sysctl.c#3 integrate .. //depot/projects/netperf_socket/sys/kern/sched_4bsd.c#3 integrate .. //depot/projects/netperf_socket/sys/kern/subr_trap.c#3 integrate .. //depot/projects/netperf_socket/sys/nfs4client/nfs4_vfsops.c#3 integrate .. //depot/projects/netperf_socket/sys/opencrypto/crypto.c#2 integrate .. //depot/projects/netperf_socket/sys/powerpc/include/critical.h#2 integrate .. //depot/projects/netperf_socket/sys/sparc64/include/critical.h#2 integrate .. //depot/projects/netperf_socket/sys/sys/_null.h#2 integrate .. //depot/projects/netperf_socket/sys/sys/param.h#3 integrate .. //depot/projects/netperf_socket/sys/vm/vm_extern.h#3 integrate .. //depot/projects/netperf_socket/sys/vm/vm_glue.c#3 integrate .. //depot/projects/netperf_socket/sys/vm/vm_mmap.c#4 integrate Differences ... ==== //depot/projects/netperf_socket/sys/alpha/include/critical.h#2 (text+ko) ==== @@ -33,7 +33,7 @@ * related support functions residing * in <arch>/<arch>/critical.c - prototyped * - * $FreeBSD: src/sys/alpha/include/critical.h,v 1.3 2003/08/12 23:24:03 imp Exp $ + * $FreeBSD: src/sys/alpha/include/critical.h,v 1.4 2004/03/05 09:19:59 le Exp $ */ #ifndef _MACHINE_CRITICAL_H_ @@ -81,8 +81,8 @@ #else /* !__GNUC__ */ -void cpu_critical_enter(void) -void cpu_critical_exit(void) +void cpu_critical_enter(void); +void cpu_critical_exit(void); #endif /* __GNUC__ */ ==== //depot/projects/netperf_socket/sys/amd64/amd64/critical.c#2 (text+ko) ==== @@ -26,15 +26,19 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/critical.c,v 1.13 2003/12/06 23:13:22 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/critical.c,v 1.14 2004/03/05 14:31:21 bde Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/proc.h> + #include <machine/critical.h> +#include <machine/psl.h> /* * cpu_critical_fork_exit() - cleanup after fork + * + * Enable interrupts in the saved copy of eflags. */ void cpu_critical_fork_exit(void) ==== //depot/projects/netperf_socket/sys/amd64/amd64/identcpu.c#2 (text+ko) ==== @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.128 2003/11/21 03:01:59 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.129 2004/03/06 00:51:30 peter Exp $"); #include "opt_cpu.h" @@ -123,8 +123,8 @@ } if (strcmp(cpu_vendor, "GenuineIntel") == 0) { - /* How the hell did you get here?? */ - strcat(cpu_model, "Yamhill?"); + /* Better late than never I suppose.. */ + strcat(cpu_model, "IA-32e"); } else if (strcmp(cpu_vendor, "AuthenticAMD") == 0) { /* * Values taken from AMD Processor Recognition ==== //depot/projects/netperf_socket/sys/amd64/conf/NOTES#4 (text+ko) ==== @@ -4,7 +4,7 @@ # This file contains machine dependent kernel configuration notes. For # machine independent notes, look in /sys/conf/NOTES. # -# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.6 2004/03/05 05:08:22 obrien Exp $ +# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.10 2004/03/05 08:04:10 obrien Exp $ # # We don't have modules on amd64. @@ -12,8 +12,7 @@ # # This directive is mandatory; it defines the architecture to be -# configured for; in this case, the 386 family based IBM-PC and -# compatibles. +# configured for; in this case, the AMD64 family based machines. # machine amd64 @@ -42,8 +41,8 @@ # # Optional: -device atpic # Legacy pic -device mptable +device atpic # Optional legacy pic support +device mptable # Optional MPSPEC mptable support options NO_MIXED_MODE # Disable use of mixed mode @@ -167,12 +166,6 @@ ##################################################################### # HARDWARE DEVICE CONFIGURATION -# To include support for VGA VESA video modes -options VESA - -# Turn on extra debugging checks and output for VESA support. -options VESA_DEBUG - # # Optional devices: # @@ -266,9 +259,9 @@ # nsp: Workbit Ninja SCSI-3 based PC Card SCSI host adapters. # stg: TMC 18C30, 18C50 based SCSI host adapters. -device ncv -device nsp -device stg +device ncv +device nsp +device stg # # Adaptec FSA RAID controllers, including integrated DELL controllers, @@ -293,7 +286,6 @@ # # Miscellaneous hardware: # -# cy: Cyclades serial driver # digi: Digiboard driver # stl: Stallion EasyIO and EasyConnection 8/32 (cd1400 based) @@ -315,7 +307,8 @@ device digi_Xe device digi_Xem device digi_Xr -#XXX# PCI versions exist, but driver needs to be moved and split up. +#XXX# PCI versions exist, but driver needs to be moved and split up, +#XXX# Warner Losh working on it. #XXX#device stl # HOT1 Xilinx 6200 card (http://www.vcc.com/) device xrpu @@ -503,7 +496,7 @@ options FB_INSTALL_CDEV # install a CDEV entry in /dev -options ENABLE_ALART +options ENABLE_ALART # Control alarm on Intel intpm driver options KBDIO_DEBUG=2 options KBD_MAXRETRY=4 options KBD_MAXWAIT=6 ==== //depot/projects/netperf_socket/sys/amd64/include/cpufunc.h#3 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/cpufunc.h,v 1.139 2004/01/28 23:53:04 peter Exp $ + * $FreeBSD: src/sys/amd64/include/cpufunc.h,v 1.140 2004/03/05 09:19:59 le Exp $ */ /* @@ -744,9 +744,9 @@ void ltr(u_short sel); void outb(u_int port, u_char data); void outl(u_int port, u_int data); -void outsb(u_int port, void *addr, size_t cnt); -void outsl(u_int port, void *addr, size_t cnt); -void outsw(u_int port, void *addr, size_t cnt); +void outsb(u_int port, const void *addr, size_t cnt); +void outsl(u_int port, const void *addr, size_t cnt); +void outsw(u_int port, const void *addr, size_t cnt); void outw(u_int port, u_short data); void ia32_pause(void); u_int rcr0(void); ==== //depot/projects/netperf_socket/sys/amd64/include/critical.h#2 (text+ko) ==== @@ -33,7 +33,7 @@ * related support functions residing * in <arch>/<arch>/critical.c - prototyped * - * $FreeBSD: src/sys/amd64/include/critical.h,v 1.6 2003/12/06 23:13:22 peter Exp $ + * $FreeBSD: src/sys/amd64/include/critical.h,v 1.7 2004/03/05 09:19:59 le Exp $ */ #ifndef _MACHINE_CRITICAL_H_ @@ -75,8 +75,8 @@ #else /* !__GNUC__ */ -void cpu_critical_enter(void) -void cpu_critical_exit(void) +void cpu_critical_enter(void); +void cpu_critical_exit(void); #endif /* __GNUC__ */ ==== //depot/projects/netperf_socket/sys/compat/ndis/kern_ndis.c#3 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.39 2004/02/14 20:57:32 wpaul Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.40 2004/03/05 22:42:16 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -244,7 +244,6 @@ } wakeup(die); - mtx_lock(&Giant); kthread_exit(0); } ==== //depot/projects/netperf_socket/sys/conf/options.amd64#4 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options.amd64,v 1.12 2004/03/05 04:38:58 obrien Exp $ +# $FreeBSD: src/sys/conf/options.amd64,v 1.13 2004/03/05 07:56:23 obrien Exp $ # Options specific to AMD64 platform kernels AUTO_EOI_1 opt_auto_eoi.h @@ -30,9 +30,6 @@ VGA_SLOW_IOACCESS opt_vga.h VGA_WIDTH90 opt_vga.h -VESA -VESA_DEBUG opt_vesa.h - ATKBD_DFLT_KEYMAP opt_atkbd.h # ------------------------------- ==== //depot/projects/netperf_socket/sys/dev/aac/aac.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/aac/aac.c,v 1.89 2004/02/25 05:41:44 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/aac/aac.c,v 1.90 2004/03/05 22:42:16 jhb Exp $"); /* * Driver for the Adaptec 'FSA' family of PCI/SCSI RAID adapters. @@ -814,7 +814,6 @@ AAC_LOCK_RELEASE(&sc->aac_io_lock); wakeup(sc->aac_dev); - mtx_lock(&Giant); kthread_exit(0); } ==== //depot/projects/netperf_socket/sys/dev/acpica/acpi_cpu.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.30 2004/03/04 05:17:52 njl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.31 2004/03/05 18:08:23 njl Exp $"); #include "opt_acpi.h" #include <sys/param.h> @@ -709,7 +709,8 @@ SYSCTL_ADD_PROC(&acpi_cpu_sysctl_ctx, SYSCTL_CHILDREN(acpi_cpu_sysctl_tree), OID_AUTO, "cx_history", CTLTYPE_STRING | CTLFLAG_RD, - NULL, 0, acpi_cpu_history_sysctl, "A", ""); + NULL, 0, acpi_cpu_history_sysctl, "A", + "count of full sleeps for Cx state / short sleeps"); #ifdef notyet /* Signal platform that we can handle _CST notification. */ ==== //depot/projects/netperf_socket/sys/dev/acpica/acpi_thermal.c#5 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_thermal.c,v 1.39 2004/03/03 18:34:42 njl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_thermal.c,v 1.40 2004/03/05 18:06:31 njl Exp $"); #include "opt_acpi.h" #include <sys/param.h> @@ -449,7 +449,7 @@ } /* Handle user override of active mode */ - if (sc->tz_requested > newactive) + if (sc->tz_requested != TZ_ACTIVE_NONE && sc->tz_requested < newactive) newactive = sc->tz_requested; /* update temperature-related flags */ ==== //depot/projects/netperf_socket/sys/dev/adlink/adlink.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/adlink/adlink.c,v 1.7 2004/02/21 21:10:40 phk Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/adlink/adlink.c,v 1.8 2004/03/05 22:41:22 jhb Exp $"); #ifdef _KERNEL #include <sys/param.h> @@ -221,6 +221,7 @@ sc = arg; idx = 0; + mtx_lock(&Giant); for (;;) { while (sc->stat[idx] == 0) msleep(sc, NULL, PRIBIO, "loran", 1); @@ -234,6 +235,7 @@ idx++; idx %= NRING; } + mtx_unlock(&Giant); kthread_exit(0); } ==== //depot/projects/netperf_socket/sys/dev/md/md.c#5 (text+ko) ==== @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $FreeBSD: src/sys/dev/md/md.c,v 1.113 2004/03/02 20:13:23 phk Exp $ + * $FreeBSD: src/sys/dev/md/md.c,v 1.114 2004/03/05 22:42:16 jhb Exp $ * */ @@ -638,8 +638,8 @@ mtx_unlock(&sc->queue_mtx); sc->procp = NULL; wakeup(&sc->procp); - if (!hasgiant) - mtx_lock(&Giant); + if (hasgiant) + mtx_unlock(&Giant); kthread_exit(0); } msleep(sc, &sc->queue_mtx, PRIBIO | PDROP, "mdwait", 0); ==== //depot/projects/netperf_socket/sys/dev/pccbb/pccbb.c#2 (text+ko) ==== @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/pccbb/pccbb.c,v 1.101 2004/01/04 22:10:00 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/pccbb/pccbb.c,v 1.102 2004/03/05 22:42:17 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1053,7 +1053,6 @@ mtx_unlock(&sc->mtx); } sc->flags &= ~CBB_KTHREAD_RUNNING; - mtx_lock(&Giant); /* kthread_exit drops */ kthread_exit(0); } ==== //depot/projects/netperf_socket/sys/dev/random/harvest.c#2 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/random/harvest.c,v 1.21 2003/11/17 23:02:21 markm Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/random/harvest.c,v 1.22 2004/03/05 22:42:17 jhb Exp $"); #include <sys/param.h> #include <sys/kthread.h> @@ -128,7 +128,6 @@ random_set_wakeup_exit(void *control) { wakeup(control); - mtx_lock(&Giant); kthread_exit(0); /* NOTREACHED */ } ==== //depot/projects/netperf_socket/sys/dev/utopia/utopia.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/utopia/utopia.c,v 1.4 2003/07/30 08:35:58 harti Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/utopia/utopia.c,v 1.5 2004/03/05 22:42:17 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1512,7 +1512,6 @@ } wakeup_one(&utopia_list); UTP_RUNLOCK_LIST(); - mtx_lock(&Giant); kthread_exit(0); } ==== //depot/projects/netperf_socket/sys/geom/bde/g_bde_work.c#3 (text+ko) ==== @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/geom/bde/g_bde_work.c,v 1.23 2004/02/08 10:19:18 phk Exp $ + * $FreeBSD: src/sys/geom/bde/g_bde_work.c,v 1.24 2004/03/05 22:42:17 jhb Exp $ * * This source file contains the state-engine which makes things happen in the * right order. @@ -663,7 +663,6 @@ mtx_unlock(&sc->worklist_mutex); sc->dead = 2; wakeup(sc); - mtx_lock(&Giant); kthread_exit(0); } ==== //depot/projects/netperf_socket/sys/i386/conf/NOTES#6 (text+ko) ==== @@ -4,7 +4,7 @@ # This file contains machine dependent kernel configuration notes. For # machine independent notes, look in /sys/conf/NOTES. # -# $FreeBSD: src/sys/i386/conf/NOTES,v 1.1132 2004/03/03 12:43:59 rik Exp $ +# $FreeBSD: src/sys/i386/conf/NOTES,v 1.1133 2004/03/05 08:04:10 obrien Exp $ # # @@ -509,6 +509,7 @@ # DE101, DE200, DE201, DE202, DE203, DE204, DE205, DE422) # lnc: Lance/PCnet cards (Isolan, Novell NE2100, NE32-VL, AMD Am7990 and # Am79C960) +# nv: nVidia nForce MCP on-board Networking. # oltr: Olicom ISA token-ring adapters OC-3115, OC-3117, OC-3118 and OC-3133. # Olicom PCI token-ring adapters OC-3136, OC-3137, OC-3139, OC-3140, # OC-3141, OC-3540 and OC-3250. @@ -560,7 +561,7 @@ hint.lnc.0.port="0x280" hint.lnc.0.irq="10" hint.lnc.0.drq="0" -#device nv +device nv device rdp 1 hint.rdp.0.at="isa" hint.rdp.0.port="0x378" @@ -1100,7 +1101,7 @@ options PECOFF_SUPPORT options PECOFF_DEBUG -options ENABLE_ALART +options ENABLE_ALART # Control alarm on Intel intpm driver options I4B_SMP_WORKAROUND options I586_PMC_GUPROF=0x70000 options KBDIO_DEBUG=2 ==== //depot/projects/netperf_socket/sys/i386/i386/critical.c#2 (text+ko) ==== @@ -26,12 +26,14 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/critical.c,v 1.12 2003/11/03 21:06:54 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/critical.c,v 1.13 2004/03/05 14:23:13 bde Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/proc.h> + #include <machine/critical.h> +#include <machine/psl.h> /* * cpu_critical_fork_exit() - cleanup after fork ==== //depot/projects/netperf_socket/sys/i386/include/cpufunc.h#2 (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/i386/include/cpufunc.h,v 1.135 2003/08/06 18:21:27 bde Exp $ + * $FreeBSD: src/sys/i386/include/cpufunc.h,v 1.138 2004/03/05 15:30:40 bde Exp $ */ /* @@ -42,13 +42,8 @@ #ifndef _MACHINE_CPUFUNC_H_ #define _MACHINE_CPUFUNC_H_ -#include <sys/cdefs.h> -#include <machine/psl.h> - -struct thread; struct region_descriptor; -__BEGIN_DECLS #define readb(va) (*(volatile u_int8_t *) (va)) #define readw(va) (*(volatile u_int16_t *) (va)) #define readl(va) (*(volatile u_int32_t *) (va)) @@ -469,21 +464,18 @@ __asm __volatile("movl %0,%%gs" : : "rm" (sel)); } -/* void lidt(struct region_descriptor *addr); */ static __inline void lidt(struct region_descriptor *addr) { __asm __volatile("lidt (%0)" : : "r" (addr)); } -/* void lldt(u_short sel); */ static __inline void lldt(u_short sel) { __asm __volatile("lldt %0" : : "r" (sel)); } -/* void ltr(u_short sel); */ static __inline void ltr(u_short sel) { @@ -623,74 +615,68 @@ int breakpoint(void); u_int bsfl(u_int mask); u_int bsrl(u_int mask); -void cpu_invlpg(u_int addr); -void cpu_invlpg_range(u_int start, u_int end); void disable_intr(void); void do_cpuid(u_int ax, u_int *p); void enable_intr(void); void halt(void); +void ia32_pause(void); u_char inb(u_int port); u_int inl(u_int port); void insb(u_int port, void *addr, size_t cnt); void insl(u_int port, void *addr, size_t cnt); void insw(u_int port, void *addr, size_t cnt); +register_t intr_disable(void); +void intr_restore(register_t ef); void invd(void); void invlpg(u_int addr); -void invlpg_range(u_int start, u_int end); void invltlb(void); u_short inw(u_int port); +void lidt(struct region_descriptor *addr); +void lldt(u_short sel); void load_cr0(u_int cr0); void load_cr3(u_int cr3); void load_cr4(u_int cr4); +void load_dr0(u_int dr0); +void load_dr1(u_int dr1); +void load_dr2(u_int dr2); +void load_dr3(u_int dr3); +void load_dr4(u_int dr4); +void load_dr5(u_int dr5); +void load_dr6(u_int dr6); +void load_dr7(u_int dr7); void load_fs(u_int sel); void load_gs(u_int sel); -struct region_descriptor; -void lidt(struct region_descriptor *addr); -void lldt(u_short sel); void ltr(u_short sel); void outb(u_int port, u_char data); void outl(u_int port, u_int data); -void outsb(u_int port, void *addr, size_t cnt); -void outsl(u_int port, void *addr, size_t cnt); -void outsw(u_int port, void *addr, size_t cnt); +void outsb(u_int port, const void *addr, size_t cnt); +void outsl(u_int port, const void *addr, size_t cnt); +void outsw(u_int port, const void *addr, size_t cnt); void outw(u_int port, u_short data); -void ia32_pause(void); u_int rcr0(void); u_int rcr2(void); u_int rcr3(void); u_int rcr4(void); -u_int rfs(void); -u_int rgs(void); u_int64_t rdmsr(u_int msr); u_int64_t rdpmc(u_int pmc); -u_int64_t rdtsc(void); -u_int read_eflags(void); -void wbinvd(void); -void write_eflags(u_int ef); -void wrmsr(u_int msr, u_int64_t newval); u_int rdr0(void); -void load_dr0(u_int dr0); u_int rdr1(void); -void load_dr1(u_int dr1); u_int rdr2(void); -void load_dr2(u_int dr2); u_int rdr3(void); -void load_dr3(u_int dr3); u_int rdr4(void); -void load_dr4(u_int dr4); u_int rdr5(void); -void load_dr5(u_int dr5); u_int rdr6(void); -void load_dr6(u_int dr6); u_int rdr7(void); -void load_dr7(u_int dr7); -register_t intr_disable(void); -void intr_restore(register_t ef); +u_int64_t rdtsc(void); +u_int read_eflags(void); +u_int rfs(void); +u_int rgs(void); +void wbinvd(void); +void write_eflags(u_int ef); +void wrmsr(u_int msr, u_int64_t newval); #endif /* __GNUC__ */ void reset_dbregs(void); -__END_DECLS - #endif /* !_MACHINE_CPUFUNC_H_ */ ==== //depot/projects/netperf_socket/sys/i386/include/critical.h#2 (text+ko) ==== @@ -33,7 +33,7 @@ * related support functions residing * in <arch>/<arch>/critical.c - prototyped * - * $FreeBSD: src/sys/i386/include/critical.h,v 1.5 2003/11/03 21:06:54 jhb Exp $ + * $FreeBSD: src/sys/i386/include/critical.h,v 1.6 2004/03/05 09:19:59 le Exp $ */ #ifndef _MACHINE_CRITICAL_H_ @@ -83,8 +83,8 @@ #else /* !__GNUC__ */ -void cpu_critical_enter(void) -void cpu_critical_exit(void) +void cpu_critical_enter(void); +void cpu_critical_exit(void); #endif /* __GNUC__ */ ==== //depot/projects/netperf_socket/sys/ia64/include/critical.h#2 (text+ko) ==== @@ -33,7 +33,7 @@ * related support functions residing * in <arch>/<arch>/critical.c - prototyped * - * $FreeBSD: src/sys/ia64/include/critical.h,v 1.3 2003/08/12 23:24:04 imp Exp $ + * $FreeBSD: src/sys/ia64/include/critical.h,v 1.4 2004/03/05 09:19:59 le Exp $ */ #ifndef _MACHINE_CRITICAL_H_ @@ -82,8 +82,8 @@ #else /* !__GNUC__ */ -void cpu_critical_enter(void) -void cpu_critical_exit(void) +void cpu_critical_enter(void); +void cpu_critical_exit(void); #endif /* __GNUC__ */ ==== //depot/projects/netperf_socket/sys/kern/kern_exec.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_exec.c,v 1.236 2004/02/18 00:54:17 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_exec.c,v 1.237 2004/03/05 22:38:26 jhb Exp $"); #include "opt_ktrace.h" #include "opt_mac.h" @@ -253,12 +253,14 @@ * that might allow a local user to illicitly obtain elevated * privileges. */ + mtx_lock(&Giant); PROC_LOCK(p); KASSERT((p->p_flag & P_INEXEC) == 0, ("%s(): process already has P_INEXEC flag", __func__)); if (p->p_flag & P_SA || p->p_numthreads > 1) { if (thread_single(SINGLE_EXIT)) { PROC_UNLOCK(p); + mtx_unlock(&Giant); return (ERESTART); /* Try again later. */ } /* @@ -269,6 +271,7 @@ td->td_mailbox = NULL; thread_single_end(); } + mtx_unlock(&Giant); p->p_flag |= P_INEXEC; PROC_UNLOCK(p); ==== //depot/projects/netperf_socket/sys/kern/kern_exit.c#3 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_exit.c,v 1.223 2004/02/27 18:39:09 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_exit.c,v 1.224 2004/03/05 22:39:53 jhb Exp $"); #include "opt_compat.h" #include "opt_ktrace.h" @@ -97,7 +97,6 @@ sys_exit(struct thread *td, struct sys_exit_args *uap) { - mtx_lock(&Giant); exit1(td, W_EXITCODE(uap->rval, 0)); /* NOTREACHED */ } @@ -121,7 +120,12 @@ #endif struct plimit *plim; - GIANT_REQUIRED; + /* + * Drop Giant if caller has it. Eventually we should warn about + * being called with Giant held. + */ + while (mtx_owned(&Giant)) + mtx_unlock(&Giant); p = td->td_proc; if (p == initproc) { @@ -133,6 +137,7 @@ /* * MUST abort all other threads before proceeding past here. */ + mtx_lock(&Giant); PROC_LOCK(p); if (p->p_flag & P_SA || p->p_numthreads > 1) { /* @@ -167,6 +172,7 @@ p->p_flag &= ~P_SA; thread_single_end(); /* Don't need this any more. */ } + mtx_unlock(&Giant); /* * With this state set: * Any thread entering the kernel from userspace will thread_exit() @@ -197,17 +203,23 @@ } #ifdef PGINPROF + mtx_lock(&Giant); vmsizmon(); + mtx_unlock(&Giant); #endif - STOPEVENT(p, S_EXIT, rv); + PROC_LOCK(p); + _STOPEVENT(p, S_EXIT, rv); wakeup(&p->p_stype); /* Wakeup anyone in procfs' PIOCWAIT */ + PROC_UNLOCK(p); /* * Check if any loadable modules need anything done at process exit. * e.g. SYSV IPC stuff * XXX what if one of these generates an error? */ + mtx_lock(&Giant); EVENTHANDLER_INVOKE(process_exit, p); + mtx_unlock(&Giant); MALLOC(p->p_ru, struct rusage *, sizeof(struct rusage), M_ZOMBIE, M_WAITOK); @@ -238,6 +250,7 @@ * Reset any sigio structures pointing to us as a result of * F_SETOWN with our pid. */ + mtx_lock(&Giant); /* XXX: not sure if needed */ funsetownlst(&p->p_sigiolst); /* @@ -245,6 +258,7 @@ * This may block! */ fdfree(td); + mtx_unlock(&Giant); /* * Remove ourself from our leader's peer list and wake our leader. @@ -259,6 +273,7 @@ } mtx_unlock(&ppeers_lock); + mtx_lock(&Giant); /* The next two chunks should probably be moved to vmspace_exit. */ vm = p->p_vmspace; /* @@ -345,6 +360,7 @@ fixjobc(p, p->p_pgrp, 0); sx_xunlock(&proctree_lock); (void)acct_process(td); + mtx_unlock(&Giant); #ifdef KTRACE /* * release trace file @@ -368,7 +384,9 @@ */ if ((vtmp = p->p_textvp) != NULL) { p->p_textvp = NULL; + mtx_lock(&Giant); vrele(vtmp); + mtx_unlock(&Giant); } /* @@ -424,6 +442,7 @@ * Save exit status and final rusage info, adding in child rusage * info and self times. */ + mtx_lock(&Giant); PROC_LOCK(p); p->p_xstat = rv; *p->p_ru = p->p_stats->p_ru; @@ -436,6 +455,7 @@ * Notify interested parties of our demise. */ KNOTE(&p->p_klist, NOTE_EXIT); + mtx_unlock(&Giant); /* * Just delete all entries in the p_klist. At this point we won't * report any more events, and there are nasty race conditions that @@ -580,7 +600,6 @@ } if (uap->options &~ (WUNTRACED|WNOHANG|WCONTINUED|WLINUXCLONE)) return (EINVAL); - mtx_lock(&Giant); loop: nfound = 0; sx_xlock(&proctree_lock); @@ -649,7 +668,6 @@ wakeup(t); PROC_UNLOCK(t); sx_xunlock(&proctree_lock); - mtx_unlock(&Giant); return (0); } @@ -669,6 +687,7 @@ * all other writes to this proc are visible now, so * no more locking is needed for p. */ + mtx_lock(&Giant); PROC_LOCK(p); p->p_xstat = 0; /* XXX: why? */ PROC_UNLOCK(p); @@ -677,6 +696,7 @@ PROC_UNLOCK(q); FREE(p->p_ru, M_ZOMBIE); p->p_ru = NULL; + mtx_unlock(&Giant); /* * Decrement the count of procs running with this uid. @@ -696,6 +716,7 @@ /* * do any thread-system specific cleanups */ + mtx_lock(&Giant); thread_wait(p); /* @@ -704,6 +725,7 @@ * release while still running in process context. */ vm_waitproc(p); + mtx_unlock(&Giant); #ifdef MAC mac_destroy_proc(p); #endif @@ -713,7 +735,6 @@ sx_xlock(&allproc_lock); nprocs--; sx_xunlock(&allproc_lock); - mtx_unlock(&Giant); return (0); } mtx_lock_spin(&sched_lock); @@ -740,7 +761,6 @@ PROC_UNLOCK(p); error = 0; } - mtx_unlock(&Giant); return (error); } mtx_unlock_spin(&sched_lock); @@ -757,30 +777,25 @@ } else error = 0; - mtx_unlock(&Giant); return (error); } PROC_UNLOCK(p); } if (nfound == 0) { sx_xunlock(&proctree_lock); - mtx_unlock(&Giant); return (ECHILD); } if (uap->options & WNOHANG) { sx_xunlock(&proctree_lock); td->td_retval[0] = 0; - mtx_unlock(&Giant); return (0); } PROC_LOCK(q); sx_xunlock(&proctree_lock); error = msleep(q, &q->p_mtx, PWAIT | PCATCH, "wait", 0); PROC_UNLOCK(q); - if (error) { - mtx_unlock(&Giant); - return (error); - } + if (error) >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403060208.i2628ZPJ067600>