From owner-p4-projects@FreeBSD.ORG Thu Sep 2 04:06:08 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6837216A4EC; Thu, 2 Sep 2004 04:06:03 +0000 (GMT) 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 5DDFD16A560 for ; Thu, 2 Sep 2004 04:06:03 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id E371E43D48 for ; Thu, 2 Sep 2004 04:06:02 +0000 (GMT) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i82462hE035517 for ; Thu, 2 Sep 2004 04:06:02 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i82462dU035514 for perforce@freebsd.org; Thu, 2 Sep 2004 04:06:02 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Thu, 2 Sep 2004 04:06:02 GMT Message-Id: <200409020406.i82462dU035514@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Subject: PERFORCE change 60846 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Sep 2004 04:06:08 -0000 http://perforce.freebsd.org/chv.cgi?CH=60846 Change 60846 by rwatson@rwatson_paprika on 2004/09/02 04:05:57 Integrate netperf_socket from CVS HEAD: - Scheduler now given more information about run queue change requests; cleanup, bug fixes, preemption likes 4bsd! ipi wakeup also in base tree for 4bsd. - mp_watchdog ported to amd64. - thread_user_enter() no longer takes p and td - loader now speaks some elf, getting amd64 modules to work - device numbers and counts removed from a few more devices - if_em fixes - powerpc pmap locking. - VM lock pushed down in several VM bits, etc. Related to netperf: - Looped back NET_WITH_GIANT, NET_NEEDS_GIANT, boot time warnings and adaptation, mpsafenet now the default in CVS! - ifi_epoch added (ABI oops, but good idea otherwise) - slstart added so if_sl has if_start defined. - Looped back ng_socket.c Giant around call into linker. - Looped back if_pcn, if_sf, if_ste, if_ti, if_tl, if_wb use of IFF_NEEDSGIANT. Affected files ... .. //depot/projects/netperf_socket/sys/alpha/alpha/trap.c#3 integrate .. //depot/projects/netperf_socket/sys/alpha/conf/GENERIC#9 integrate .. //depot/projects/netperf_socket/sys/alpha/conf/NOTES#3 integrate .. //depot/projects/netperf_socket/sys/alpha/linux/linux_machdep.c#3 integrate .. //depot/projects/netperf_socket/sys/alpha/pci/pcibus.c#3 integrate .. //depot/projects/netperf_socket/sys/amd64/amd64/mp_machdep.c#12 integrate .. //depot/projects/netperf_socket/sys/amd64/amd64/mp_watchdog.c#1 branch .. //depot/projects/netperf_socket/sys/amd64/amd64/pmap.c#27 integrate .. //depot/projects/netperf_socket/sys/amd64/amd64/trap.c#10 integrate .. //depot/projects/netperf_socket/sys/amd64/ia32/ia32_syscall.c#2 integrate .. //depot/projects/netperf_socket/sys/amd64/include/mp_watchdog.h#1 branch .. //depot/projects/netperf_socket/sys/amd64/linux32/linux32_machdep.c#3 integrate .. //depot/projects/netperf_socket/sys/boot/common/Makefile.inc#3 integrate .. //depot/projects/netperf_socket/sys/boot/common/bootstrap.h#2 integrate .. //depot/projects/netperf_socket/sys/boot/common/load_elf.c#3 integrate .. //depot/projects/netperf_socket/sys/boot/common/load_elf32_obj.c#1 branch .. //depot/projects/netperf_socket/sys/boot/common/load_elf64_obj.c#1 branch .. //depot/projects/netperf_socket/sys/boot/common/load_elf_obj.c#1 branch .. //depot/projects/netperf_socket/sys/boot/common/misc.c#2 integrate .. //depot/projects/netperf_socket/sys/boot/common/reloc_elf.c#1 branch .. //depot/projects/netperf_socket/sys/boot/common/reloc_elf32.c#1 branch .. //depot/projects/netperf_socket/sys/boot/common/reloc_elf64.c#1 branch .. //depot/projects/netperf_socket/sys/boot/i386/libi386/elf32_freebsd.c#2 integrate .. //depot/projects/netperf_socket/sys/boot/i386/libi386/elf64_freebsd.c#2 integrate .. //depot/projects/netperf_socket/sys/boot/i386/loader/conf.c#2 integrate .. //depot/projects/netperf_socket/sys/cam/cam_periph.c#2 integrate .. //depot/projects/netperf_socket/sys/cam/scsi/scsi_da.c#8 integrate .. //depot/projects/netperf_socket/sys/coda/cnode.h#3 integrate .. //depot/projects/netperf_socket/sys/coda/coda_fbsd.c#6 integrate .. //depot/projects/netperf_socket/sys/coda/coda_psdev.c#3 integrate .. //depot/projects/netperf_socket/sys/coda/coda_vfsops.c#5 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.alpha#4 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.amd64#3 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.arm#2 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.i386#3 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.ia64#3 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.pc98#3 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.powerpc#4 integrate .. //depot/projects/netperf_socket/sys/conf/Makefile.sparc64#3 integrate .. //depot/projects/netperf_socket/sys/conf/NOTES#40 integrate .. //depot/projects/netperf_socket/sys/conf/files#51 integrate .. //depot/projects/netperf_socket/sys/conf/files.amd64#16 integrate .. //depot/projects/netperf_socket/sys/conf/files.pc98#16 integrate .. //depot/projects/netperf_socket/sys/conf/kmod.mk#14 integrate .. //depot/projects/netperf_socket/sys/conf/majors#6 integrate .. //depot/projects/netperf_socket/sys/conf/options#29 integrate .. //depot/projects/netperf_socket/sys/conf/options.amd64#7 integrate .. //depot/projects/netperf_socket/sys/conf/options.pc98#8 integrate .. //depot/projects/netperf_socket/sys/dev/acpica/acpi_pci_link.c#13 integrate .. //depot/projects/netperf_socket/sys/dev/acpica/acpi_thermal.c#12 integrate .. //depot/projects/netperf_socket/sys/dev/aic7xxx/ahc_isa.c#3 integrate .. //depot/projects/netperf_socket/sys/dev/ata/ata-chipset.c#19 integrate .. //depot/projects/netperf_socket/sys/dev/ata/ata-disk.c#9 integrate .. //depot/projects/netperf_socket/sys/dev/bfe/if_bfe.c#9 integrate .. //depot/projects/netperf_socket/sys/dev/bfe/if_bfereg.h#4 integrate .. //depot/projects/netperf_socket/sys/dev/drm/radeon_drv.c#2 integrate .. //depot/projects/netperf_socket/sys/dev/em/if_em.c#8 integrate .. //depot/projects/netperf_socket/sys/dev/em/if_em.h#3 integrate .. //depot/projects/netperf_socket/sys/dev/em/if_em_hw.c#3 integrate .. //depot/projects/netperf_socket/sys/dev/em/if_em_hw.h#3 integrate .. //depot/projects/netperf_socket/sys/dev/fdc/fdc_acpi.c#4 integrate .. //depot/projects/netperf_socket/sys/dev/fdc/fdc_isa.c#6 integrate .. //depot/projects/netperf_socket/sys/dev/firewire/fwcrom.c#4 integrate .. //depot/projects/netperf_socket/sys/dev/md/md.c#19 integrate .. //depot/projects/netperf_socket/sys/dev/tga/tga_pci.c#4 integrate .. //depot/projects/netperf_socket/sys/dev/usb/usbdi.c#4 integrate .. //depot/projects/netperf_socket/sys/fs/autofs/autofs.h#1 branch .. //depot/projects/netperf_socket/sys/fs/autofs/autofs_util.c#1 branch .. //depot/projects/netperf_socket/sys/fs/autofs/autofs_vfsops.c#1 branch .. //depot/projects/netperf_socket/sys/fs/autofs/autofs_vnops.c#1 branch .. //depot/projects/netperf_socket/sys/geom/concat/g_concat.c#14 integrate .. //depot/projects/netperf_socket/sys/geom/geom_io.c#8 integrate .. //depot/projects/netperf_socket/sys/geom/label/g_label.c#6 integrate .. //depot/projects/netperf_socket/sys/geom/mirror/g_mirror.c#10 integrate .. //depot/projects/netperf_socket/sys/geom/raid3/g_raid3.c#6 integrate .. //depot/projects/netperf_socket/sys/geom/stripe/g_stripe.c#11 integrate .. //depot/projects/netperf_socket/sys/i386/bios/mca_machdep.c#3 integrate .. //depot/projects/netperf_socket/sys/i386/bios/vpd.c#4 integrate .. //depot/projects/netperf_socket/sys/i386/conf/NOTES#28 integrate .. //depot/projects/netperf_socket/sys/i386/i386/mp_machdep.c#9 integrate .. //depot/projects/netperf_socket/sys/i386/i386/pmap.c#27 integrate .. //depot/projects/netperf_socket/sys/i386/i386/trap.c#7 integrate .. //depot/projects/netperf_socket/sys/i386/include/param.h#5 integrate .. //depot/projects/netperf_socket/sys/i386/linux/linux_machdep.c#4 integrate .. //depot/projects/netperf_socket/sys/i4b/driver/i4b_ing.c#5 integrate .. //depot/projects/netperf_socket/sys/i4b/driver/i4b_ipr.c#4 integrate .. //depot/projects/netperf_socket/sys/i4b/driver/i4b_isppp.c#2 integrate .. //depot/projects/netperf_socket/sys/i4b/driver/i4b_rbch.c#4 integrate .. //depot/projects/netperf_socket/sys/i4b/driver/i4b_tel.c#4 integrate .. //depot/projects/netperf_socket/sys/i4b/driver/i4b_trace.c#4 integrate .. //depot/projects/netperf_socket/sys/i4b/layer4/i4b_i4bdrv.c#4 integrate .. //depot/projects/netperf_socket/sys/i4b/layer4/i4b_l4.c#2 integrate .. //depot/projects/netperf_socket/sys/ia64/ia64/exception.S#2 integrate .. //depot/projects/netperf_socket/sys/ia64/ia64/locore.S#4 integrate .. //depot/projects/netperf_socket/sys/ia64/ia64/pmap.c#18 integrate .. //depot/projects/netperf_socket/sys/ia64/ia64/support.S#3 integrate .. //depot/projects/netperf_socket/sys/ia64/ia64/syscall.S#3 integrate .. //depot/projects/netperf_socket/sys/ia64/ia64/trap.c#8 integrate .. //depot/projects/netperf_socket/sys/kern/init_main.c#8 integrate .. //depot/projects/netperf_socket/sys/kern/kern_conf.c#9 integrate .. //depot/projects/netperf_socket/sys/kern/kern_fork.c#17 integrate .. //depot/projects/netperf_socket/sys/kern/kern_idle.c#6 integrate .. //depot/projects/netperf_socket/sys/kern/kern_intr.c#10 integrate .. //depot/projects/netperf_socket/sys/kern/kern_kse.c#13 integrate .. //depot/projects/netperf_socket/sys/kern/kern_kthread.c#2 integrate .. //depot/projects/netperf_socket/sys/kern/kern_prot.c#10 integrate .. //depot/projects/netperf_socket/sys/kern/kern_shutdown.c#15 integrate .. //depot/projects/netperf_socket/sys/kern/kern_sig.c#20 integrate .. //depot/projects/netperf_socket/sys/kern/kern_switch.c#12 integrate .. //depot/projects/netperf_socket/sys/kern/kern_thr.c#11 integrate .. //depot/projects/netperf_socket/sys/kern/kern_thread.c#25 integrate .. //depot/projects/netperf_socket/sys/kern/link_elf_obj.c#7 integrate .. //depot/projects/netperf_socket/sys/kern/sched_4bsd.c#14 integrate .. //depot/projects/netperf_socket/sys/kern/sched_ule.c#20 integrate .. //depot/projects/netperf_socket/sys/kern/subr_bus.c#14 integrate .. //depot/projects/netperf_socket/sys/kern/subr_smp.c#11 integrate .. //depot/projects/netperf_socket/sys/kern/subr_trap.c#9 integrate .. //depot/projects/netperf_socket/sys/kern/subr_turnstile.c#7 integrate .. //depot/projects/netperf_socket/sys/modules/Makefile#19 integrate .. //depot/projects/netperf_socket/sys/modules/aac/Makefile#2 integrate .. //depot/projects/netperf_socket/sys/modules/autofs/Makefile#1 branch .. //depot/projects/netperf_socket/sys/modules/cam/Makefile#3 integrate .. //depot/projects/netperf_socket/sys/modules/coda/Makefile#2 integrate .. //depot/projects/netperf_socket/sys/modules/coda5/Makefile#2 integrate .. //depot/projects/netperf_socket/sys/modules/cp/Makefile#2 integrate .. //depot/projects/netperf_socket/sys/modules/ctau/Makefile#3 integrate .. //depot/projects/netperf_socket/sys/modules/cx/Makefile#3 integrate .. //depot/projects/netperf_socket/sys/modules/if_ppp/Makefile#2 integrate .. //depot/projects/netperf_socket/sys/modules/if_tap/Makefile#2 integrate .. //depot/projects/netperf_socket/sys/modules/pf/Makefile#5 integrate .. //depot/projects/netperf_socket/sys/net/if.c#18 integrate .. //depot/projects/netperf_socket/sys/net/if.h#7 integrate .. //depot/projects/netperf_socket/sys/net/if_sl.c#13 integrate .. //depot/projects/netperf_socket/sys/net/netisr.c#4 integrate .. //depot/projects/netperf_socket/sys/netgraph/ng_socket.c#7 integrate .. //depot/projects/netperf_socket/sys/netgraph/ng_tty.c#6 integrate .. //depot/projects/netperf_socket/sys/netinet6/ipsec.c#4 integrate .. //depot/projects/netperf_socket/sys/netipx/ipx.c#2 integrate .. //depot/projects/netperf_socket/sys/pc98/conf/GENERIC#14 integrate .. //depot/projects/netperf_socket/sys/pc98/pc98/atapi.c#2 integrate .. //depot/projects/netperf_socket/sys/pc98/pc98/wd.c#4 integrate .. //depot/projects/netperf_socket/sys/pci/if_pcn.c#8 integrate .. //depot/projects/netperf_socket/sys/pci/if_sf.c#9 integrate .. //depot/projects/netperf_socket/sys/pci/if_ste.c#17 integrate .. //depot/projects/netperf_socket/sys/pci/if_ti.c#9 integrate .. //depot/projects/netperf_socket/sys/pci/if_tl.c#6 integrate .. //depot/projects/netperf_socket/sys/pci/if_wb.c#8 integrate .. //depot/projects/netperf_socket/sys/powerpc/powerpc/pmap.c#17 integrate .. //depot/projects/netperf_socket/sys/powerpc/powerpc/trap.c#6 integrate .. //depot/projects/netperf_socket/sys/sparc64/sparc64/trap.c#3 integrate .. //depot/projects/netperf_socket/sys/sys/bio.h#7 integrate .. //depot/projects/netperf_socket/sys/sys/kernel.h#6 integrate .. //depot/projects/netperf_socket/sys/sys/param.h#28 integrate .. //depot/projects/netperf_socket/sys/sys/proc.h#25 integrate .. //depot/projects/netperf_socket/sys/sys/sched.h#6 integrate .. //depot/projects/netperf_socket/sys/sys/smp.h#5 integrate .. //depot/projects/netperf_socket/sys/sys/systm.h#10 integrate .. //depot/projects/netperf_socket/sys/sys/ucred.h#3 integrate .. //depot/projects/netperf_socket/sys/vm/vm_fault.c#9 integrate .. //depot/projects/netperf_socket/sys/vm/vm_mmap.c#12 integrate .. //depot/projects/netperf_socket/sys/vm/vm_object.c#11 integrate .. //depot/projects/netperf_socket/sys/vm/vm_zeroidle.c#5 integrate Differences ... ==== //depot/projects/netperf_socket/sys/alpha/alpha/trap.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/alpha/trap.c,v 1.118 2004/07/10 22:35:05 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/trap.c,v 1.120 2004/08/31 07:34:53 julian Exp $"); /* #include "opt_fix_unaligned_vax_fp.h" */ #include "opt_ddb.h" @@ -591,9 +591,6 @@ framep->tf_regs[FRAME_SP] = alpha_pal_rdusp(); userret(td, framep, sticks); mtx_assert(&Giant, MA_NOTOWNED); -#ifdef DIAGNOSTIC - cred_free_thread(td); -#endif } return; @@ -665,7 +662,7 @@ if (td->td_ucred != p->p_ucred) cred_update_thread(td); if (p->p_flag & P_SA) - thread_user_enter(p, td); + thread_user_enter(td); #ifdef DIAGNOSTIC alpha_fpstate_check(td); #endif @@ -785,9 +782,6 @@ PTRACESTOP_SC(p, td, S_PT_SCX); -#ifdef DIAGNOSTIC - cred_free_thread(td); -#endif WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning", (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???"); mtx_assert(&sched_lock, MA_NOTOWNED); ==== //depot/projects/netperf_socket/sys/alpha/conf/GENERIC#9 (text+ko) ==== @@ -18,7 +18,7 @@ # # For hardware specific information check HARDWARE.TXT # -# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.175 2004/08/27 15:16:21 andre Exp $ +# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.177 2004/08/30 18:40:00 wilko Exp $ machine alpha cpu EV4 @@ -41,7 +41,8 @@ options DEC_ST550 # Personal Workstation 433, 500, 600 options DEC_ST6600 # XP1000, DP264, DS20, DS10, family options DEC_1000A # AlphaServer 1000, 1000A, 800 -options DEC_KN8AE # AlphaServer 8200/8400 (Turbolaser) +# TurboLaser support is broken +# options DEC_KN8AE # AlphaServer 8200/8400 (Turbolaser) options DEC_KN300 # AlphaServer 4100 (Rawhide), # AlphaServer 1200 (Tincup) @@ -152,6 +153,7 @@ # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (``Tulip'') +device em # Intel PRO/1000 adapter Gigabit Ethernet Card device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') ==== //depot/projects/netperf_socket/sys/alpha/conf/NOTES#3 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/alpha/conf/NOTES,v 1.154 2004/07/10 22:29:40 marcel Exp $ +# $FreeBSD: src/sys/alpha/conf/NOTES,v 1.155 2004/08/28 21:47:24 wilko Exp $ # # This file contains machine dependent kernel configuration notes. For # machine independent notes, look in /sys/conf/NOTES. @@ -36,7 +36,8 @@ options DEC_ST550 # Personal Workstation 433, 500, 600 options DEC_ST6600 # XP1000, DP264, DS20, DS10, family options DEC_1000A # AlphaServer 1000, 1000A, 800 -options DEC_KN8AE # AlphaServer 8200/8400 (Turbolaser) +# TurboLaser support is broken +# options DEC_KN8AE # AlphaServer 8200/8400 (Turbolaser) options DEC_KN300 # AlphaServer 4100 (Rawhide), # AlphaServer 1200 (Tincup) ==== //depot/projects/netperf_socket/sys/alpha/linux/linux_machdep.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.33 2004/02/04 21:52:52 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.34 2004/09/01 02:11:27 julian Exp $"); #include #include @@ -180,7 +180,7 @@ */ mtx_lock_spin(&sched_lock); TD_SET_CAN_RUN(td2); - setrunqueue(td2); + setrunqueue(td2, SRQ_BORING); mtx_unlock_spin(&sched_lock); td->td_retval[0] = p2->p_pid; ==== //depot/projects/netperf_socket/sys/alpha/pci/pcibus.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/pci/pcibus.c,v 1.34 2004/07/01 15:07:27 gallatin Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/pci/pcibus.c,v 1.35 2004/08/29 19:07:14 marcel Exp $"); #include "opt_isa.h" @@ -262,7 +262,7 @@ else if (flags & PCI_RF_BWX) va = ALPHAPCI_CVT_BWX(bus, rv->r_start); else - va = (void *) rv->r_start; /* maybe NULL? */ + va = (void *)ALPHA_PHYS_TO_K0SEG(rv->r_start); rman_set_virtual(rv, va); break; ==== //depot/projects/netperf_socket/sys/amd64/amd64/mp_machdep.c#12 (text+ko) ==== @@ -25,10 +25,11 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.244 2004/08/28 00:49:54 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.246 2004/09/01 06:42:01 julian Exp $"); #include "opt_cpu.h" #include "opt_kstack_pages.h" +#include "opt_mp_watchdog.h" #include #include @@ -56,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -111,7 +113,6 @@ */ static u_int logical_cpus; -static u_int logical_cpus_mask; /* used to hold the AP's until we are ready to release them */ static struct mtx ap_boot_mtx; @@ -136,7 +137,6 @@ static int start_ap(int apic_id); static void release_aps(void *dummy); -static int hlt_cpus_mask; static int hlt_logical_cpus; static struct sysctl_ctx_list logical_cpu_clist; static u_int bootMP_size; @@ -1067,8 +1067,15 @@ mp_grab_cpu_hlt(void) { u_int mask = PCPU_GET(cpumask); +#ifdef MP_WATCHDOG + u_int cpuid = PCPU_GET(cpuid); +#endif int retval; +#ifdef MP_WATCHDOG + ap_watchdog(cpuid); +#endif + retval = mask & hlt_cpus_mask; while (mask & hlt_cpus_mask) __asm __volatile("sti; hlt" : : : "memory"); ==== //depot/projects/netperf_socket/sys/amd64/amd64/pmap.c#27 (text+ko) ==== @@ -75,7 +75,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.495 2004/08/28 00:49:54 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.496 2004/08/30 03:52:04 alc Exp $"); /* * Manages physical address maps. @@ -2451,7 +2451,7 @@ pv_entry_t pv, npv; #ifdef PMAP_REMOVE_PAGES_CURPROC_ONLY - if (!curthread || (pmap != vmspace_pmap(curthread->td_proc->p_vmspace))) { + if (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)) { printf("warning: pmap_remove_pages called with non-current pmap\n"); return; } ==== //depot/projects/netperf_socket/sys/amd64/amd64/trap.c#10 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.279 2004/08/16 22:56:20 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.281 2004/08/31 07:34:53 julian Exp $"); /* * AMD64 Trap and System call handling @@ -259,7 +259,7 @@ case T_PAGEFLT: /* page fault */ if (td->td_pflags & TDP_SA) - thread_user_enter(p, td); + thread_user_enter(td); i = trap_pfault(&frame, TRUE); if (i == -1) goto userout; @@ -471,9 +471,6 @@ userret(td, &frame, sticks); mtx_assert(&Giant, MA_NOTOWNED); userout: -#ifdef DIAGNOSTIC - cred_free_thread(td); -#endif out: return; } @@ -698,7 +695,7 @@ if (td->td_ucred != p->p_ucred) cred_update_thread(td); if (p->p_flag & P_SA) - thread_user_enter(p, td); + thread_user_enter(td); params = (caddr_t)frame.tf_rsp + sizeof(register_t); code = frame.tf_rax; orig_tf_rflags = frame.tf_rflags; @@ -830,9 +827,6 @@ PTRACESTOP_SC(p, td, S_PT_SCX); -#ifdef DIAGNOSTIC - cred_free_thread(td); -#endif WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning", (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???"); mtx_assert(&sched_lock, MA_NOTOWNED); ==== //depot/projects/netperf_socket/sys/amd64/ia32/ia32_syscall.c#2 (text+ko) ==== @@ -36,7 +36,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_syscall.c,v 1.6 2003/11/17 08:58:14 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_syscall.c,v 1.7 2004/08/31 06:12:12 julian Exp $"); /* * 386 Trap and System call handling @@ -247,9 +247,6 @@ */ STOPEVENT(p, S_SCX, code); -#ifdef DIAGNOSTIC - cred_free_thread(td); -#endif WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning", (code >= 0 && code < SYS_MAXSYSCALL) ? freebsd32_syscallnames[code] : "???"); mtx_assert(&sched_lock, MA_NOTOWNED); ==== //depot/projects/netperf_socket/sys/amd64/linux32/linux32_machdep.c#3 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.3 2004/08/24 20:52:52 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.4 2004/09/01 02:11:27 julian Exp $"); #include #include @@ -503,7 +503,7 @@ */ mtx_lock_spin(&sched_lock); TD_SET_CAN_RUN(td2); - setrunqueue(td2); + setrunqueue(td2, SRQ_BORING); mtx_unlock_spin(&sched_lock); td->td_retval[0] = p2->p_pid; ==== //depot/projects/netperf_socket/sys/boot/common/Makefile.inc#3 (text+ko) ==== @@ -1,17 +1,18 @@ -# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.17 2004/02/07 11:05:10 ru Exp $ +# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.19 2004/08/29 00:48:41 iedowse Exp $ SRCS+= bcache.c boot.c commands.c console.c devopen.c interp.c SRCS+= interp_backslash.c interp_parse.c ls.c misc.c SRCS+= module.c panic.c .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" -SRCS+= load_elf32.c load_elf64.c +SRCS+= load_elf32.c load_elf32_obj.c load_elf64.c load_elf64_obj.c +SRCS+= reloc_elf32.c reloc_elf64.c .endif .if ${MACHINE_ARCH} == "powerpc" -SRCS+= load_elf32.c +SRCS+= load_elf32.c reloc_elf32.c .endif .if ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "alpha" -SRCS+= load_elf64.c +SRCS+= load_elf64.c reloc_elf64.c .endif .if defined(LOADER_NET_SUPPORT) ==== //depot/projects/netperf_socket/sys/boot/common/bootstrap.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.38 2003/05/01 03:56:29 peter Exp $ + * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.41 2004/08/29 00:48:41 iedowse Exp $ */ #include @@ -76,6 +76,9 @@ void hexdump(caddr_t region, size_t len); size_t strlenout(vm_offset_t str); char *strdupout(vm_offset_t str); +void kern_bzero(vm_offset_t dest, size_t len); +int kern_pread(int fd, vm_offset_t dest, size_t len, off_t off); +void *alloc_pread(int fd, off_t off, size_t len); /* bcache.c */ int bcache_init(u_int nblks, size_t bsize); @@ -232,7 +235,19 @@ /* MI module loaders */ #ifdef __elfN +/* Relocation types. */ +#define ELF_RELOC_REL 1 +#define ELF_RELOC_RELA 2 + +struct elf_file; +typedef Elf_Addr (symaddr_fn)(struct elf_file *ef, Elf_Word symidx); + int __elfN(loadfile)(char *filename, u_int64_t dest, struct preloaded_file **result); +int __elfN(obj_loadfile)(char *filename, u_int64_t dest, + struct preloaded_file **result); +int __elfN(reloc)(struct elf_file *ef, symaddr_fn *symaddr, + const void *reldata, int reltype, Elf_Addr relbase, + Elf_Addr dataaddr, void *data, size_t len); #endif /* ==== //depot/projects/netperf_socket/sys/boot/common/load_elf.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/common/load_elf.c,v 1.30 2004/03/11 10:07:24 bde Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/common/load_elf.c,v 1.32 2004/08/28 23:03:05 iedowse Exp $"); #include #include @@ -58,6 +58,8 @@ Elf_Hashelt nchains; Elf_Hashelt *buckets; Elf_Hashelt *chains; + Elf_Rel *rel; + size_t relsz; Elf_Rela *rela; size_t relasz; char *strtab; @@ -71,11 +73,10 @@ static int __elfN(loadimage)(struct preloaded_file *mp, elf_file_t ef, u_int64_t loadaddr); static int __elfN(lookup_symbol)(struct preloaded_file *mp, elf_file_t ef, const char* name, Elf_Sym* sym); -#ifdef __sparc__ -static void __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef, - void *p, void *val, size_t len); -#endif +static int __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef, + Elf_Addr p, void *val, size_t len); static int __elfN(parse_modmetadata)(struct preloaded_file *mp, elf_file_t ef); +static symaddr_fn __elfN(symaddr); static char *fake_modname(const char *name); const char *__elfN(kerneltype) = "elf kernel"; @@ -241,10 +242,8 @@ int ret; vm_offset_t firstaddr; vm_offset_t lastaddr; - void *buf; - size_t resid, chunk; + size_t chunk; ssize_t result; - vm_offset_t dest; Elf_Addr ssym, esym; Elf_Dyn *dp; Elf_Addr adp; @@ -305,14 +304,10 @@ phdr[i].p_vaddr + off, fpcopy); } if (phdr[i].p_filesz > fpcopy) { - if (lseek(ef->fd, (off_t)(phdr[i].p_offset + fpcopy), - SEEK_SET) == -1) { - printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadexec: cannot seek\n"); - goto out; - } - if (archsw.arch_readin(ef->fd, phdr[i].p_vaddr + off + fpcopy, - phdr[i].p_filesz - fpcopy) != (ssize_t)(phdr[i].p_filesz - fpcopy)) { - printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadexec: archsw.readin failed\n"); + if (kern_pread(ef->fd, phdr[i].p_vaddr + off + fpcopy, + phdr[i].p_filesz - fpcopy, phdr[i].p_offset + fpcopy) != 0) { + printf("\nelf" __XSTRING(__ELF_WORD_SIZE) + "_loadimage: read failed\n"); goto out; } } @@ -324,22 +319,8 @@ (long)(phdr[i].p_vaddr + off + phdr[i].p_memsz - 1)); #endif - /* no archsw.arch_bzero */ - buf = malloc(PAGE_SIZE); - if (buf == NULL) { - printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadimage: malloc() failed\n"); - goto out; - } - bzero(buf, PAGE_SIZE); - resid = phdr[i].p_memsz - phdr[i].p_filesz; - dest = phdr[i].p_vaddr + off + phdr[i].p_filesz; - while (resid > 0) { - chunk = min(PAGE_SIZE, resid); - archsw.arch_copyin(buf, dest, chunk); - resid -= chunk; - dest += chunk; - } - free(buf); + kern_bzero(phdr[i].p_vaddr + off + phdr[i].p_filesz, + phdr[i].p_memsz - phdr[i].p_filesz); } #ifdef ELF_VERBOSE printf("\n"); @@ -361,16 +342,10 @@ chunk = ehdr->e_shnum * ehdr->e_shentsize; if (chunk == 0 || ehdr->e_shoff == 0) goto nosyms; - shdr = malloc(chunk); - if (shdr == NULL) - goto nosyms; - if (lseek(ef->fd, (off_t)ehdr->e_shoff, SEEK_SET) == -1) { - printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadimage: cannot lseek() to section headers"); - goto nosyms; - } - result = read(ef->fd, shdr, chunk); - if (result < 0 || (size_t)result != chunk) { - printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadimage: read section headers failed"); + shdr = alloc_pread(ef->fd, ehdr->e_shoff, chunk); + if (shdr == NULL) { + printf("\nelf" __XSTRING(__ELF_WORD_SIZE) + "_loadimage: failed to read section headers"); goto nosyms; } symtabindex = -1; @@ -507,6 +482,12 @@ case DT_SYMTAB: ef->symtab = (Elf_Sym*)(uintptr_t)(dp[i].d_un.d_ptr + off); break; + case DT_REL: + ef->rel = (Elf_Rel *)(uintptr_t)(dp[i].d_un.d_ptr + off); + break; + case DT_RELSZ: + ef->relsz = dp[i].d_un.d_val; + break; case DT_RELA: ef->rela = (Elf_Rela *)(uintptr_t)(dp[i].d_un.d_ptr + off); break; @@ -589,7 +570,7 @@ struct mod_version mver; Elf_Sym sym; char *s; - int modcnt, minfolen; + int error, modcnt, minfolen; Elf_Addr v, p, p_stop; if (__elfN(lookup_symbol)(fp, ef, "__start_set_modmetadata_set", &sym) != 0) @@ -602,25 +583,31 @@ modcnt = 0; while (p < p_stop) { COPYOUT(p, &v, sizeof(v)); -#ifdef __sparc64__ - __elfN(reloc_ptr)(fp, ef, p, &v, sizeof(v)); -#else - v += ef->off; -#endif + error = __elfN(reloc_ptr)(fp, ef, p, &v, sizeof(v)); + if (error == EOPNOTSUPP) + v += ef->off; + else if (error != 0) + return (error); #if defined(__i386__) && __ELF_WORD_SIZE == 64 COPYOUT(v, &md64, sizeof(md64)); + error = __elfN(reloc_ptr)(fp, ef, v, &md64, sizeof(md64)); + if (error == EOPNOTSUPP) { + md64.md_cval += ef->off; + md64.md_data += ef->off; + } else if (error != 0) + return (error); md.md_version = md64.md_version; md.md_type = md64.md_type; - md.md_cval = (const char *)(uintptr_t)(md64.md_cval + ef->off); - md.md_data = (void *)(uintptr_t)(md64.md_data + ef->off); + md.md_cval = (const char *)(uintptr_t)md64.md_cval; + md.md_data = (void *)(uintptr_t)md64.md_data; #else COPYOUT(v, &md, sizeof(md)); -#ifdef __sparc64__ - __elfN(reloc_ptr)(fp, ef, v, &md, sizeof(md)); -#else - md.md_cval += ef->off; - md.md_data += ef->off; -#endif + error = __elfN(reloc_ptr)(fp, ef, v, &md, sizeof(md)); + if (error == EOPNOTSUPP) { + md.md_cval += ef->off; + md.md_data += ef->off; + } else if (error != 0) + return (error); #endif p += sizeof(Elf_Addr); switch(md.md_type) { @@ -713,29 +700,53 @@ return ENOENT; } -#ifdef __sparc__ /* - * Apply any intra-module relocations to the value. *p is the load address + * Apply any intra-module relocations to the value. p is the load address * of the value and val/len is the value to be modified. This does NOT modify * the image in-place, because this is done by kern_linker later on. + * + * Returns EOPNOTSUPP if no relocation method is supplied. */ -static void +static int __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef, - void *p, void *val, size_t len) + Elf_Addr p, void *val, size_t len) { - Elf_Addr off = (Elf_Addr)p - ef->off, word; size_t n; - Elf_Rela r; + Elf_Rela a; + Elf_Rel r; + int error; + + /* + * The kernel is already relocated, but we still want to apply + * offset adjustments. + */ + if (ef->kernel) + return (EOPNOTSUPP); + + for (n = 0; n < ef->relsz / sizeof(r); n++) { + COPYOUT(ef->rel + n, &r, sizeof(r)); - for (n = 0; n < ef->relasz / sizeof(r); n++) { - COPYOUT(ef->rela + n, &r, sizeof(r)); + error = __elfN(reloc)(ef, __elfN(symaddr), &r, ELF_RELOC_REL, + ef->off, p, val, len); + if (error != 0) + return (error); + } + for (n = 0; n < ef->relasz / sizeof(a); n++) { + COPYOUT(ef->rela + n, &a, sizeof(a)); - if (r.r_offset >= off && r.r_offset < off + len && - ELF_R_TYPE(r.r_info) == R_SPARC_RELATIVE) { - word = ef->off + r.r_addend; - bcopy(&word, (char *)val + (r.r_offset - off), - sizeof(word)); - } + error = __elfN(reloc)(ef, __elfN(symaddr), &a, ELF_RELOC_RELA, + ef->off, p, val, len); + if (error != 0) + return (error); } + + return (0); } -#endif + +static Elf_Addr +__elfN(symaddr)(struct elf_file *ef, Elf_Word symidx) +{ + + /* Symbol lookup by index not required here. */ + return (0); +} ==== //depot/projects/netperf_socket/sys/boot/common/misc.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/common/misc.c,v 1.8 2003/08/25 23:30:41 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/common/misc.c,v 1.9 2004/08/28 14:57:34 iedowse Exp $"); #include #include @@ -93,6 +93,74 @@ return(result); } +/* Zero a region in kernel space. */ +void +kern_bzero(vm_offset_t dest, size_t len) +{ + char buf[256]; + size_t chunk, resid; + + bzero(buf, sizeof(buf)); + resid = len; + while (resid > 0) { + chunk = min(sizeof(buf), resid); + archsw.arch_copyin(buf, dest, chunk); + resid -= chunk; + dest += chunk; + } +} + +/* + * Read the specified part of a file to kernel space. Unlike regular + * pread, the file pointer is advanced to the end of the read data, + * and it just returns 0 if successful. + */ +int +kern_pread(int fd, vm_offset_t dest, size_t len, off_t off) +{ + ssize_t nread; + + if (lseek(fd, off, SEEK_SET) == -1) { + printf("\nlseek failed\n"); + return (-1); + } + nread = archsw.arch_readin(fd, dest, len); + if (nread != len) { + printf("\nreadin failed\n"); + return (-1); + } + return (0); +} + +/* + * Read the specified part of a file to a malloced buffer. The file + * pointer is advanced to the end of the read data. + */ +void * +alloc_pread(int fd, off_t off, size_t len) +{ + void *buf; + ssize_t nread; + + buf = malloc(len); + if (buf == NULL) { + printf("\nmalloc(%d) failed\n", (int)len); + return (NULL); + } + if (lseek(fd, off, SEEK_SET) == -1) { + printf("\nlseek failed\n"); + free(buf); + return (NULL); + } + nread = read(fd, buf, len); + if (nread != len) { + printf("\nread failed\n"); + free(buf); + return (NULL); + } + return (buf); +} + /* * Display a region in traditional hexdump format. */ ==== //depot/projects/netperf_socket/sys/boot/i386/libi386/elf32_freebsd.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf32_freebsd.c,v 1.13 2003/08/25 23:28:31 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf32_freebsd.c,v 1.14 2004/08/29 00:48:41 iedowse Exp $"); #include #include @@ -40,8 +40,10 @@ #include "btxv86.h" static int elf32_exec(struct preloaded_file *amp); +static int elf32_obj_exec(struct preloaded_file *amp); struct file_format i386_elf = { elf32_loadfile, elf32_exec }; +struct file_format i386_elf_obj = { elf32_obj_loadfile, elf32_obj_exec }; /* * There is an a.out kernel and one or more a.out modules loaded. @@ -74,3 +76,9 @@ panic("exec returned"); } + +static int +elf32_obj_exec(struct preloaded_file *fp) +{ + return (EFTYPE); +} ==== //depot/projects/netperf_socket/sys/boot/i386/libi386/elf64_freebsd.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf64_freebsd.c,v 1.14 2003/08/25 23:28:31 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf64_freebsd.c,v 1.15 2004/08/29 00:48:41 iedowse Exp $"); #define __ELF_WORD_SIZE 64 #include @@ -41,8 +41,10 @@ #include "btxv86.h" static int elf64_exec(struct preloaded_file *amp); +static int elf64_obj_exec(struct preloaded_file *amp); struct file_format amd64_elf = { elf64_loadfile, elf64_exec }; +struct file_format amd64_elf_obj = { elf64_obj_loadfile, elf64_obj_exec }; #define PG_V 0x001 #define PG_RW 0x002 @@ -116,3 +118,9 @@ panic("exec returned"); } + +static int +elf64_obj_exec(struct preloaded_file *fp) +{ + return (EFTYPE); +} ==== //depot/projects/netperf_socket/sys/boot/i386/loader/conf.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/i386/loader/conf.c,v 1.24 2003/08/25 23:28:32 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/loader/conf.c,v 1.25 2004/08/29 00:48:42 iedowse Exp $"); #include #include @@ -83,11 +83,15 @@ * rather than reading the file go first. */ extern struct file_format i386_elf; +extern struct file_format i386_elf_obj; extern struct file_format amd64_elf; +extern struct file_format amd64_elf_obj; struct file_format *file_formats[] = { &i386_elf, + &i386_elf_obj, &amd64_elf, + &amd64_elf_obj, NULL }; ==== //depot/projects/netperf_socket/sys/cam/cam_periph.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.56 2003/11/08 10:56:57 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.57 2004/08/30 20:14:21 gibbs Exp $"); >>> TRUNCATED FOR MAIL (1000 lines) <<<