Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Jul 2004 17:48:18 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 58052 for review
Message-ID:  <200407241748.i6OHmIhR099642@repoman.freebsd.org>

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

Change 58052 by rwatson@rwatson_tislabs on 2004/07/24 17:47:43

	Integrate netperf_socket from FreeBSD CVS HEAD:
	
	- Some debugger rearrangement.
	- More pmap locking.
	- Various hacking on preemption.
	- A number of less functional and EISA drivers trimmed from GENERIC.
	- pf lock order reversal correction.
	- A parade of ACPI tweaks.
	- curthread assertions in devfs/suser.
	- More sleep-related assertions in mbuf allocation.
	- BPF use of 0/NULL cleanup.
	- if_clone lock fix.
	- if_vlan memory leak fix.
	- nf_node_revive() for persistent notes.
	- TCP SACK fix.
	- Don't sync on panic by default.
	- Suser exemption to mac_bsdextended.
	
	Loop back from rwatson_netperf via CVS:
	
	- Giant pushed down into fo_close(), fo_stat().  Less giant for
	  sockets and pipes now.
	- Tweaks to KTR.
	- Pipe allocation optimizations.
	- M_DONTWAIT in raw_ip.c to prevent sleep with mutex held.
	- MPSAFE callout for NFS server with debug.mpsafenet.

Affected files ...

.. //depot/projects/netperf_socket/sys/alpha/alpha/db_trace.c#3 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/interrupt.c#7 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/pmap.c#14 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/db_trace.c#4 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/pmap.c#21 integrate
.. //depot/projects/netperf_socket/sys/amd64/conf/GENERIC#11 integrate
.. //depot/projects/netperf_socket/sys/amd64/conf/GENERIC.hints#3 integrate
.. //depot/projects/netperf_socket/sys/amd64/include/pmap.h#12 integrate
.. //depot/projects/netperf_socket/sys/arm/arm/busdma_machdep.c#2 integrate
.. //depot/projects/netperf_socket/sys/arm/arm/cpufunc.c#2 integrate
.. //depot/projects/netperf_socket/sys/arm/arm/db_trace.c#4 integrate
.. //depot/projects/netperf_socket/sys/arm/arm/machdep.c#3 integrate
.. //depot/projects/netperf_socket/sys/arm/arm/pmap.c#5 integrate
.. //depot/projects/netperf_socket/sys/arm/arm/support.S#2 integrate
.. //depot/projects/netperf_socket/sys/arm/include/cpufunc.h#3 integrate
.. //depot/projects/netperf_socket/sys/arm/include/pcb.h#3 integrate
.. //depot/projects/netperf_socket/sys/arm/include/pmap.h#3 integrate
.. //depot/projects/netperf_socket/sys/arm/include/profile.h#2 integrate
.. //depot/projects/netperf_socket/sys/boot/efi/libefi/arch/ia64/ldscript.ia64#2 integrate
.. //depot/projects/netperf_socket/sys/boot/efi/libefi/arch/ia64/start.S#2 integrate
.. //depot/projects/netperf_socket/sys/boot/efi/loader/Makefile#3 integrate
.. //depot/projects/netperf_socket/sys/compat/ndis/subr_ntoskrnl.c#15 integrate
.. //depot/projects/netperf_socket/sys/conf/NOTES#30 integrate
.. //depot/projects/netperf_socket/sys/conf/files.i386#23 integrate
.. //depot/projects/netperf_socket/sys/conf/options#22 integrate
.. //depot/projects/netperf_socket/sys/contrib/pf/net/pf.c#11 integrate
.. //depot/projects/netperf_socket/sys/contrib/pf/net/pf_if.c#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_command.c#5 integrate
.. //depot/projects/netperf_socket/sys/ddb/ddb.h#3 integrate
.. //depot/projects/netperf_socket/sys/dev/acpica/acpi_timer.c#7 integrate
.. //depot/projects/netperf_socket/sys/dev/acpica/acpi_video.c#6 integrate
.. //depot/projects/netperf_socket/sys/dev/ata/ata-lowlevel.c#10 integrate
.. //depot/projects/netperf_socket/sys/dev/bge/if_bge.c#9 integrate
.. //depot/projects/netperf_socket/sys/dev/cp/if_cp.c#7 integrate
.. //depot/projects/netperf_socket/sys/dev/ctau/if_ct.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/cx/if_cx.c#14 integrate
.. //depot/projects/netperf_socket/sys/dev/ed/if_ed_pccard.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/ep/if_ep_eisa.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/ep/if_ep_isa.c#2 integrate
.. //depot/projects/netperf_socket/sys/dev/ep/if_ep_mca.c#2 integrate
.. //depot/projects/netperf_socket/sys/dev/firewire/fwohci.c#6 integrate
.. //depot/projects/netperf_socket/sys/dev/firewire/fwohci_pci.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/firewire/if_fwe.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/firewire/if_fwip.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/firewire/sbp.c#6 integrate
.. //depot/projects/netperf_socket/sys/dev/pccbb/pccbb.c#12 integrate
.. //depot/projects/netperf_socket/sys/dev/pccbb/pccbbdevid.h#2 integrate
.. //depot/projects/netperf_socket/sys/dev/sio/sio.c#19 integrate
.. //depot/projects/netperf_socket/sys/dev/sound/pci/emu10k1.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/usb/ehci_pci.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/usb/uhub.c#4 integrate
.. //depot/projects/netperf_socket/sys/fs/devfs/devfs_vnops.c#4 integrate
.. //depot/projects/netperf_socket/sys/i386/acpica/acpi_panasonic.c#1 branch
.. //depot/projects/netperf_socket/sys/i386/conf/NOTES#23 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/busdma_machdep.c#4 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/db_trace.c#3 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/pmap.c#20 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/vm_machdep.c#14 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/db_trace.c#3 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/pmap.c#14 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_descrip.c#12 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_event.c#8 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_exec.c#12 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_ktr.c#2 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_lock.c#3 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_mutex.c#7 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_prot.c#8 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_shutdown.c#10 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_switch.c#6 integrate
.. //depot/projects/netperf_socket/sys/kern/sched_4bsd.c#10 integrate
.. //depot/projects/netperf_socket/sys/kern/sched_ule.c#15 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_kdb.c#4 integrate
.. //depot/projects/netperf_socket/sys/kern/sys_pipe.c#4 integrate
.. //depot/projects/netperf_socket/sys/kern/sys_socket.c#10 integrate
.. //depot/projects/netperf_socket/sys/kern/uipc_jumbo.c#2 integrate
.. //depot/projects/netperf_socket/sys/kern/uipc_mbuf.c#8 integrate
.. //depot/projects/netperf_socket/sys/kern/uipc_mbuf2.c#5 integrate
.. //depot/projects/netperf_socket/sys/kern/vfs_subr.c#16 integrate
.. //depot/projects/netperf_socket/sys/kern/vfs_vnops.c#8 integrate
.. //depot/projects/netperf_socket/sys/modules/acpi/Makefile#4 integrate
.. //depot/projects/netperf_socket/sys/modules/acpi/acpi_panasonic/Makefile#1 branch
.. //depot/projects/netperf_socket/sys/net/bpf.c#9 integrate
.. //depot/projects/netperf_socket/sys/net/if_clone.c#2 integrate
.. //depot/projects/netperf_socket/sys/net/if_vlan.c#11 integrate
.. //depot/projects/netperf_socket/sys/netgraph/atm/ng_atm.c#4 integrate
.. //depot/projects/netperf_socket/sys/netgraph/netgraph.h#6 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_base.c#10 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_bridge.c#6 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_device.c#6 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_ether.c#7 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_gif.c#5 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_sample.c#4 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_source.c#4 integrate
.. //depot/projects/netperf_socket/sys/netinet/ip_fw2.c#11 integrate
.. //depot/projects/netperf_socket/sys/netinet/raw_ip.c#9 integrate
.. //depot/projects/netperf_socket/sys/netinet/tcp_output.c#8 integrate
.. //depot/projects/netperf_socket/sys/netinet/tcp_subr.c#12 integrate
.. //depot/projects/netperf_socket/sys/nfsserver/nfs_srvsock.c#8 integrate
.. //depot/projects/netperf_socket/sys/nfsserver/nfs_srvsubs.c#9 integrate
.. //depot/projects/netperf_socket/sys/opencrypto/cryptodev.c#5 integrate
.. //depot/projects/netperf_socket/sys/pc98/pc98/sio.c#17 integrate
.. //depot/projects/netperf_socket/sys/powerpc/include/db_machdep.h#3 integrate
.. //depot/projects/netperf_socket/sys/powerpc/include/float.h#6 integrate
.. //depot/projects/netperf_socket/sys/powerpc/include/frame.h#2 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powermac/pswitch.c#2 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/db_trace.c#3 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/elf_machdep.c#4 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/genassym.c#5 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/locore.S#4 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/machdep.c#5 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/swtch.S#2 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/trap_subr.S#4 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/vm_machdep.c#9 integrate
.. //depot/projects/netperf_socket/sys/security/mac_bsdextended/mac_bsdextended.c#3 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/db_trace.c#3 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/pmap.c#9 integrate
.. //depot/projects/netperf_socket/sys/sys/cdefs.h#4 integrate
.. //depot/projects/netperf_socket/sys/sys/kdb.h#3 integrate
.. //depot/projects/netperf_socket/sys/sys/mbuf.h#15 integrate
.. //depot/projects/netperf_socket/sys/sys/param.h#20 integrate
.. //depot/projects/netperf_socket/sys/sys/pipe.h#4 integrate
.. //depot/projects/netperf_socket/sys/vm/swap_pager.c#7 integrate
.. //depot/projects/netperf_socket/sys/vm/uma_core.c#10 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_contig.c#9 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_map.c#13 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_map.h#7 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_object.c#7 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_object.h#3 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_page.c#12 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/alpha/alpha/db_trace.c#3 (text+ko) ====

@@ -42,7 +42,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 /*__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.9 2000/12/13 03:16:36 mycroft Exp $");*/
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_trace.c,v 1.19 2004/07/10 23:47:18 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_trace.c,v 1.20 2004/07/21 05:07:08 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -324,20 +324,6 @@
 }
 
 void
-db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count,
-    char *modif)
-{
-	struct thread *td;
-
-	td = (have_addr) ? kdb_thr_lookup(addr) : kdb_thread;
-	if (td == NULL) {
-		db_printf("Thread %d not found\n", (int)addr);
-		return;
-	}
-	db_trace_thread(td, count);
-}
-
-void
 db_trace_self(void)
 {
 	register_t pc, sp;

==== //depot/projects/netperf_socket/sys/alpha/alpha/interrupt.c#7 (text+ko) ====

@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 /* __KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.23 1998/02/24 07:38:01 thorpej Exp $");*/
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/interrupt.c,v 1.81 2004/07/19 16:37:47 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/interrupt.c,v 1.82 2004/07/20 06:32:32 alc Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -436,7 +436,7 @@
 		critical_enter();
 		ih->ih_handler(ih->ih_argument);
 		/* XXX */
-		td->td_pflags &= ~TDP_OWEPREEMPT;
+		curthread->td_pflags &= ~TDP_OWEPREEMPT;
 		critical_exit();
 		return;
 	}

==== //depot/projects/netperf_socket/sys/alpha/alpha/pmap.c#14 (text+ko) ====

@@ -148,7 +148,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.162 2004/07/19 18:12:04 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.163 2004/07/21 03:38:46 alc Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1359,6 +1359,8 @@
 	pv_entry_t pv;
 	int rtval;
 
+	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
+	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	if (m->md.pv_list_count < pmap->pm_stats.resident_count) {
 		TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
 			if (pmap == pv->pv_pmap && va == pv->pv_va) 
@@ -1416,6 +1418,7 @@
 	pt_entry_t oldpte;
 	vm_page_t m;
 
+	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
 	oldpte = *ptq;
 	*ptq = 0;
 	if (oldpte & PG_W)
@@ -1760,7 +1763,9 @@
 	if (opa) {
 		int err;
 		vm_page_lock_queues();
+		PMAP_LOCK(pmap);
 		err = pmap_remove_pte(pmap, pte, va);
+		PMAP_UNLOCK(pmap);
 		vm_page_unlock_queues();
 		if (err)
 			panic("pmap_enter: pte vanished, va: 0x%lx", va);

==== //depot/projects/netperf_socket/sys/amd64/amd64/db_trace.c#4 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_trace.c,v 1.61 2004/07/10 23:47:18 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_trace.c,v 1.62 2004/07/21 05:07:08 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -463,20 +463,6 @@
 }
 
 void
-db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count,
-    char *modif)
-{
-	struct thread *td;
-
-	td = (have_addr) ? kdb_thr_lookup(addr) : kdb_thread;
-	if (td == NULL) {
-		db_printf("Thread %ld not found\n", addr);
-		return;
-	}
-	db_trace_thread(td, count);
-}
-
-void
 db_trace_self(void)
 {
 	struct amd64_frame *frame;

==== //depot/projects/netperf_socket/sys/amd64/amd64/pmap.c#21 (text+ko) ====

@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.485 2004/07/15 18:00:41 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.486 2004/07/20 02:40:56 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -160,8 +160,6 @@
 
 struct pmap kernel_pmap_store;
 LIST_HEAD(pmaplist, pmap);
-static struct pmaplist allpmaps;
-static struct mtx allpmaps_lock;
 
 vm_paddr_t avail_start;		/* PA of first available physical page */
 vm_paddr_t avail_end;		/* PA of last available physical page */
@@ -491,11 +489,6 @@
 	kernel_pmap->pm_pml4 = (pdp_entry_t *) (KERNBASE + KPML4phys);
 	kernel_pmap->pm_active = -1;	/* don't allow deactivation */
 	TAILQ_INIT(&kernel_pmap->pm_pvlist);
-	LIST_INIT(&allpmaps);
-	mtx_init(&allpmaps_lock, "allpmaps", NULL, MTX_SPIN);
-	mtx_lock_spin(&allpmaps_lock);
-	LIST_INSERT_HEAD(&allpmaps, kernel_pmap, pm_list);
-	mtx_unlock_spin(&allpmaps_lock);
 	nkpt = NKPT;
 
 	/*
@@ -1082,9 +1075,6 @@
 	pmap->pm_active = 0;
 	TAILQ_INIT(&pmap->pm_pvlist);
 	bzero(&pmap->pm_stats, sizeof pmap->pm_stats);
-	mtx_lock_spin(&allpmaps_lock);
-	LIST_INSERT_HEAD(&allpmaps, pmap, pm_list);
-	mtx_unlock_spin(&allpmaps_lock);
 }
 
 /*
@@ -1112,10 +1102,6 @@
 	if ((pml4pg->flags & PG_ZERO) == 0)
 		pagezero(pmap->pm_pml4);
 
-	mtx_lock_spin(&allpmaps_lock);
-	LIST_INSERT_HEAD(&allpmaps, pmap, pm_list);
-	mtx_unlock_spin(&allpmaps_lock);
-
 	/* Wire in kernel global address entries. */
 	pmap->pm_pml4[KPML4I] = KPDPphys | PG_RW | PG_V | PG_U;
 	pmap->pm_pml4[DMPML4I] = DMPDPphys | PG_RW | PG_V | PG_U;
@@ -1332,10 +1318,6 @@
 	    ("pmap_release: pmap resident count %ld != 0",
 	    pmap->pm_stats.resident_count));
 
-	mtx_lock_spin(&allpmaps_lock);
-	LIST_REMOVE(pmap, pm_list);
-	mtx_unlock_spin(&allpmaps_lock);
-
 	m = PHYS_TO_VM_PAGE(pmap->pm_pml4[PML4PML4I] & PG_FRAME);
 
 	pmap->pm_pml4[KPML4I] = 0;	/* KVA */

==== //depot/projects/netperf_socket/sys/amd64/conf/GENERIC#11 (text+ko) ====

@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.415 2004/07/18 15:59:03 scottl Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.416 2004/07/22 22:29:45 imp Exp $
 
 machine		amd64
 cpu		HAMMER
@@ -92,7 +92,6 @@
 options 	ATA_STATIC_ID	# Static device numbering
 
 # SCSI Controllers
-device		ahb		# EISA AHA1742 family
 device		ahc		# AHA2940 and onboard AIC7xxx devices
 device		ahd		# AHA39320/29320 and onboard AIC79xx devices
 device		amd		# AMD 53C974 (Tekram DC-390(T))
@@ -104,7 +103,6 @@
 
 device		adv		# Advansys SCSI adapters
 device		adw		# Advansys wide SCSI adapters
-device		aha		# Adaptec 154x SCSI adapters
 device		aic		# Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
 device		bt		# Buslogic/Mylex MultiMaster SCSI adapters
 
@@ -207,22 +205,16 @@
 device		ex		# Intel EtherExpress Pro/10 and Pro/10+
 device		ep		# Etherlink III based cards
 device		fe		# Fujitsu MB8696x based cards
-# XXX kvtop brokenness
-#device		ie		# EtherExpress 8/16, 3C507, StarLAN 10 etc.
 # XXX kvtop brokenness, pointer/int warnings
 #device		lnc		# NE2100, NE32-VL Lance Ethernet cards
 device		sn		# SMC's 9000 series of Ethernet chips
 device		xe		# Xircom pccard Ethernet
 
-# ISA devices that use the old ISA shims
-#device		le
-
 # Wireless NIC cards
 device		wlan		# 802.11 support
 device		an		# Aironet 4500/4800 802.11 wireless NICs.
 device		awi		# BayStack 660 and others
 device		wi		# WaveLAN/Intersil/Symbol 802.11 wireless NICs.
-#device		wl		# Older non 802.11 Wavelan wireless NIC.
 
 # Pseudo devices.
 device		random		# Entropy device

==== //depot/projects/netperf_socket/sys/amd64/conf/GENERIC.hints#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/amd64/conf/GENERIC.hints,v 1.14 2004/03/19 03:28:38 obrien Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC.hints,v 1.15 2004/07/22 22:28:34 imp Exp $
 hint.fdc.0.at="isa"
 hint.fdc.0.port="0x3F0"
 hint.fdc.0.irq="6"
@@ -17,15 +17,6 @@
 hint.vga.0.at="isa"
 hint.sc.0.at="isa"
 hint.sc.0.flags="0x100"
-hint.pcic.0.at="isa"
-# hint.pcic.0.irq="10"	# Default to polling
-hint.pcic.0.port="0x3e0"
-hint.pcic.0.maddr="0xd0000"
-hint.pcic.1.at="isa"
-hint.pcic.1.irq="11"
-hint.pcic.1.port="0x3e2"
-hint.pcic.1.maddr="0xd4000"
-hint.pcic.1.disabled="1"
 hint.sio.0.at="isa"
 hint.sio.0.port="0x3F8"
 hint.sio.0.flags="0x10"

==== //depot/projects/netperf_socket/sys/amd64/include/pmap.h#12 (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.121 2004/07/14 07:13:35 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.122 2004/07/20 02:40:56 alc Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -226,7 +226,6 @@
 	u_int			pm_active;	/* active on cpus */
 	/* spare u_int here due to padding */
 	struct pmap_statistics	pm_stats;	/* pmap statistics */
-	LIST_ENTRY(pmap) 	pm_list;	/* List of all pmaps */
 };
 
 typedef struct pmap	*pmap_t;

==== //depot/projects/netperf_socket/sys/arm/arm/busdma_machdep.c#2 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.1 2004/05/14 11:46:42 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.2 2004/07/21 22:04:05 cognet Exp $");
 
 /*
  * MacPPC bus dma support routines
@@ -433,7 +433,7 @@
 	if (td != NULL)
 		pmap = vmspace_pmap(td->td_proc->p_vmspace);
 	else
-		pmap = NULL;
+		pmap = pmap_kernel();
 
 	lastaddr = *lastaddrp;
 	bmask = ~(dmat->boundary - 1);
@@ -457,7 +457,7 @@
 			} else {
 				pte = *ptep;
 				KASSERT((pte & L2_TYPE_MASK) != L2_TYPE_INV,
-				    "INV type");
+				    ("INV type"));
 				if (__predict_false((pte & L2_TYPE_MASK)
 						    == L2_TYPE_L)) {
 					curaddr = (pte & L2_L_FRAME) |

==== //depot/projects/netperf_socket/sys/arm/arm/cpufunc.c#2 (text+ko) ====

@@ -45,7 +45,7 @@
  * Created      : 30/01/97
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc.c,v 1.1 2004/05/14 11:46:42 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc.c,v 1.2 2004/07/20 22:39:24 cognet Exp $");
 
 #include <sys/cdefs.h>
 
@@ -54,6 +54,8 @@
 #include <sys/systm.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
+#include <sys/bus.h>
+#include <machine/bus.h>
 #include <machine/cpu.h>
 #include <machine/disassem.h>
 
@@ -2079,10 +2081,8 @@
 	cpuctrl |= CPU_CONTROL_BEND_ENABLE;
 #endif
 
-#if 0
 	if (vector_page == ARM_VECTORS_HIGH)
 		cpuctrl |= CPU_CONTROL_VECRELOC;
-#endif
 
 	/* Clear out the cache */
 	cpu_idcache_wbinv_all();
@@ -2147,10 +2147,8 @@
 	cpuctrl |= CPU_CONTROL_BEND_ENABLE;
 #endif
 
-#if 0
 	if (vector_page == ARM_VECTORS_HIGH)
 		cpuctrl |= CPU_CONTROL_VECRELOC;
-#endif
 
 	/* Clear out the cache */
 	cpu_idcache_wbinv_all();

==== //depot/projects/netperf_socket/sys/arm/arm/db_trace.c#4 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/db_trace.c,v 1.3 2004/07/19 12:26:44 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/db_trace.c,v 1.4 2004/07/21 05:07:09 marcel Exp $");
 #include <sys/param.h>
 #include <sys/systm.h>
 
@@ -86,7 +86,7 @@
 #define FR_RSP	(-2)
 #define FR_RFP	(-3)
 
-void
+static void
 db_stack_trace_cmd(addr, have_addr, count, modif)
 	db_expr_t       addr;
 	int             have_addr;
@@ -242,6 +242,7 @@
 {
 	return (0);
 }
+
 int
 db_trace_thread(struct thread *thr, int count)
 {

==== //depot/projects/netperf_socket/sys/arm/arm/machdep.c#3 (text+ko) ====

@@ -44,7 +44,7 @@
 
 #include "opt_compat.h"
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/machdep.c,v 1.2 2004/07/12 21:19:43 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/machdep.c,v 1.4 2004/07/20 23:00:02 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -86,7 +86,6 @@
 
 uint32_t cpu_reset_address = 0;
 int cold = 1;
-int astpending = 0;
 vm_offset_t vector_page;
 
 static void *
@@ -298,12 +297,21 @@
 int
 ptrace_single_step(struct thread *td)
 {
+	/* XXX */
+	return (0);
+}
+
+int
+ptrace_clear_single_step(struct thread *td)
+{
+	/* XXX */
 	return (0);
 }
 
 int
 ptrace_set_pc(struct thread *td, unsigned long addr)
 {
+	td->td_frame->tf_pc = addr;
 	return (0);
 }
 

==== //depot/projects/netperf_socket/sys/arm/arm/pmap.c#5 (text+ko) ====

@@ -144,7 +144,7 @@
  */
 /* Include header files */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.6 2004/07/13 22:40:59 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.8 2004/07/22 23:04:41 alc Exp $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -2219,7 +2219,8 @@
 
 	for (loop = 0; loop < needed; loop++, l1++) {
 		/* Allocate a L1 page table */
-		va = (vm_offset_t)contigmalloc(L1_TABLE_SIZE, NULL, 0, 0x0, 0xffffffff, L1_TABLE_SIZE, 0);
+		va = (vm_offset_t)contigmalloc(L1_TABLE_SIZE, M_VMPMAP, 0, 0x0,
+		    0xffffffff, L1_TABLE_SIZE, 0);
 
 		if (va == 0)
 			panic("Cannot allocate L1 KVM");
@@ -4371,7 +4372,7 @@
 	
 	GIANT_REQUIRED;
 	
-	va = kmem_alloc_pageable(kernel_map, size);
+	va = kmem_alloc_nofault(kernel_map, size);
 	if (!va)
 		panic("pmap_mapdev: Couldn't alloc kernel virtual memory");
 		

==== //depot/projects/netperf_socket/sys/arm/arm/support.S#2 (text+ko) ====

@@ -26,7 +26,7 @@
 
 #include <machine/asm.h>
 #include <machine/asmacros.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/support.S,v 1.3 2004/05/14 23:42:30 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/support.S,v 1.4 2004/07/20 22:38:46 cognet Exp $");
 
 #include "assym.s"
 
@@ -65,11 +65,6 @@
 	bic	r14, r14, #(I32_bit) ; \
 	msr	cpsr_all, r14
 
-ENTRY(disable_intr)
-	IRQdisableALL
-ENTRY(enable_intr)
-	IRQenableALL
-
 /*
  * memset: Sets a block of memory to the specified value
  *

==== //depot/projects/netperf_socket/sys/arm/include/cpufunc.h#3 (text+ko) ====

@@ -38,7 +38,7 @@
  *
  * Prototypes for cpu, mmu and tlb related functions.
  *
- * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.2 2004/07/12 21:20:38 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.3 2004/07/20 22:38:46 cognet Exp $
  */
 
 #ifndef _MACHINE_CPUFUNC_H_
@@ -50,13 +50,11 @@
 #include <machine/cpuconf.h>
 #include <machine/katelib.h> /* For in[bwl] and out[bwl] */
 
-void disable_intr(void);
-void enable_intr(void);
-
 static __inline void
 breakpoint(void)
 {
 }
+
 static __inline register_t
 intr_disable(void)
 {

==== //depot/projects/netperf_socket/sys/arm/include/pcb.h#3 (text+ko) ====

@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/pcb.h,v 1.2 2004/07/12 21:19:22 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/pcb.h,v 1.3 2004/07/21 22:04:32 cognet Exp $
  */
 
 #ifndef	_MACHINE_PCB_H_
@@ -94,7 +94,7 @@
 void	makectx(struct trapframe *tf, struct pcb *pcb);
 
 #ifdef _KERNEL
-extern struct pcb *curpcb;
+
 void    savectx(struct pcb *);
 #endif	/* _KERNEL */
 

==== //depot/projects/netperf_socket/sys/arm/include/pmap.h#3 (text+ko) ====

@@ -44,7 +44,7 @@
  *      from: @(#)pmap.h        7.4 (Berkeley) 5/12/91
  * 	from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30
  *
- * $FreeBSD: src/sys/arm/include/pmap.h,v 1.2 2004/07/12 21:22:40 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/pmap.h,v 1.3 2004/07/21 22:02:48 cognet Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -119,6 +119,7 @@
 
 #endif
 
+#define pmap_page_is_mapped(m)	(!TAILQ_EMPTY(&(m)->md.pv_list))
 /*
  * Pmap sutff
  */

==== //depot/projects/netperf_socket/sys/arm/include/profile.h#2 (text+ko) ====

@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)profile.h	8.1 (Berkeley) 6/11/93
- * $FreeBSD: src/sys/arm/include/profile.h,v 1.2 2004/05/19 15:41:25 bde Exp $
+ * $FreeBSD: src/sys/arm/include/profile.h,v 1.3 2004/07/20 22:38:46 cognet Exp $
  */
 
 #ifndef _MACHINE_PROFILE_H_
@@ -61,11 +61,11 @@
 #define	MCOUNT_DECL(s)	u_long s;
 #ifdef SMP
 extern int	mcount_lock;
-#define	MCOUNT_ENTER(s)	{ s = read_eflags(); disable_intr(); \
+#define	MCOUNT_ENTER(s)	{ s = intr_disable(); \
  			  while (!atomic_cmpset_acq_int(&mcount_lock, 0, 1)) \
 			  	/* nothing */ ; }
 #define	MCOUNT_EXIT(s)	{ atomic_store_rel_int(&mcount_lock, 0); \
-			  write_eflags(s); }
+			  intr_restore(s); }
 #else
 #define	MCOUNT_ENTER(s)	{ s = read_eflags(); disable_intr(); }
 #define	MCOUNT_EXIT(s)	(write_eflags(s))

==== //depot/projects/netperf_socket/sys/boot/efi/libefi/arch/ia64/ldscript.ia64#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/boot/efi/libefi/arch/ia64/ldscript.ia64,v 1.7 2003/07/17 00:32:08 marcel Exp $ */
+/* $FreeBSD: src/sys/boot/efi/libefi/arch/ia64/ldscript.ia64,v 1.8 2004/07/20 07:01:02 marcel Exp $ */
 OUTPUT_FORMAT("elf64-ia64-little", "elf64-ia64-little", "elf64-ia64-little")
 OUTPUT_ARCH(ia64)
 ENTRY(_start_plabel)
@@ -47,7 +47,7 @@
   . = ALIGN(4096);
   .dynamic	: { *(.dynamic) }
   . = ALIGN(4096);
-  .rela		: {
+  .rela.dyn	: {
     *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
     *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
     *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)

==== //depot/projects/netperf_socket/sys/boot/efi/libefi/arch/ia64/start.S#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/efi/libefi/arch/ia64/start.S,v 1.6 2002/12/10 04:14:01 marcel Exp $
+ *	$FreeBSD: src/sys/boot/efi/libefi/arch/ia64/start.S,v 1.7 2004/07/20 07:11:14 marcel Exp $
  */
 
 	.text
@@ -70,6 +70,7 @@
 #define R_IA64_FPTR64MSB	0x46	/* word64 MSB	@fptr(S + A) */
 #define R_IA64_FPTR64LSB	0x47	/* word64 LSB	@fptr(S + A) */
 #define R_IA64_REL64MSB		0x6e	/* word64 MSB	BD + A */
+#define R_IA64_REL32LSB		0x6d	/* word32 LSB	BD + A */
 #define R_IA64_REL64LSB		0x6f	/* word64 LSB	BD + A */
 #define	R_IA64_IPLTLSB		0x81	/* function descriptor LSB speciaal */
 
@@ -99,21 +100,19 @@
 END(_start)
 
 	// PLABEL for PE32+
-	.global _start_plabel
 	.section .plabel, "a"
 	.align	16
-_start_plabel:	
-	.quad	_start
-	.quad	__gp
+	.global _start_plabel
+_start_plabel:
+	data16	@iplt(_start)
 	.previous
 
 	// A PE32+ relocation entry for the plabel
-
 	.section .reloc, "a"
-	.long	_start_plabel
-	.long	12
-	.short	(10 << 12) + 0
-	.short	(10 << 12) + 8
+	data4	_start_plabel
+	data4	12
+	data2	(10 << 12) + 0
+	data2	(10 << 12) + 8
 	.previous
 
 // in0:	image base
@@ -218,6 +217,9 @@
 	cmp.eq	p6,p0=R_IA64_NONE,r23
 (p6)	br.cond.dpnt.few 2b
 	;;
+	cmp.eq	p6,p0=R_IA64_REL32LSB,r23
+(p6)	br.cond.dptk.few 3f
+	;;
 	cmp.eq	p6,p0=R_IA64_REL64LSB,r23
 (p6)	br.cond.dptk.few 4f
 	;;
@@ -252,6 +254,13 @@
 	st8	[r15]=gp		// fdesc:GP
 	br.cond.sptk.few 2b
 
+	// REL32LSB
+3:
+	add	r29=in0,r17
+	;;
+	st4	[r15]=r29
+	br.cond.sptk.few 2b
+
 	// REL64LSB
 4:
 	add	r29=in0,r17		// BD + A

==== //depot/projects/netperf_socket/sys/boot/efi/loader/Makefile#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/boot/efi/loader/Makefile,v 1.21 2004/02/13 04:45:41 marcel Exp $
+# $FreeBSD: src/sys/boot/efi/loader/Makefile,v 1.22 2004/07/20 07:01:02 marcel Exp $
 
 PROG= 		loader.sym
 INTERNALPROG=
@@ -41,12 +41,12 @@
 
 loader.efi: loader.sym
 	${OBJCOPY} -j .text \
-		-j .hash \
 		-j .data \
 		-j .sdata \
 		-j .dynamic \
-		-j .rela \
+		-j .rela.dyn \
 		-j .reloc \
+		-j .hash \
 		-j .dynsym \
 		-j .dynstr \
 		--target=efi-app-${MACHINE_ARCH} \

==== //depot/projects/netperf_socket/sys/compat/ndis/subr_ntoskrnl.c#15 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.39 2004/07/10 20:55:15 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.40 2004/07/20 20:28:57 wpaul Exp $");
 
 #include <sys/ctype.h>
 #include <sys/unistd.h>
@@ -44,7 +44,9 @@
 #include <sys/mutex.h>
 
 #include <sys/callout.h>
+#if __FreeBSD_version > 502113
 #include <sys/kdb.h>
+#endif
 #include <sys/kernel.h>
 #include <sys/proc.h>
 #include <sys/kthread.h>
@@ -1634,7 +1636,11 @@
 ntoskrnl_debugger(void)
 {
 
+#if __FreeBSD_version < 502113
+	Debugger("ntoskrnl_debugger(): breakpoint");
+#else
 	kdb_enter("ntoskrnl_debugger(): breakpoint");
+#endif
 }
 
 static void

==== //depot/projects/netperf_socket/sys/conf/NOTES#30 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1248 2004/07/18 15:59:02 scottl Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1250 2004/07/23 17:44:07 rwatson Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -192,6 +192,7 @@
 #	  bugs during development.  Enabling this option will reduce
 #	  performance and increase the frequency of kernel panics by
 #	  design.  If you aren't sure that you need it then you don't.
+#         DON'T TURN THIS ON.
 # MUTEX_DEBUG enables various extra assertions in the mutex code.
 # SLEEPQUEUE_PROFILING enables rudimentary profiling of the hash table
 #	  used to hold active sleep queues.
@@ -447,6 +448,7 @@
 options 	NETGRAPH_BPF
 options 	NETGRAPH_BRIDGE
 options 	NETGRAPH_CISCO
+options 	NETGRAPH_DEVICE
 options 	NETGRAPH_ECHO
 options 	NETGRAPH_EIFACE
 options 	NETGRAPH_ETHER

==== //depot/projects/netperf_socket/sys/conf/files.i386#23 (text+ko) ====

@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $FreeBSD: src/sys/conf/files.i386,v 1.499 2004/07/15 16:43:52 njl Exp $
+# $FreeBSD: src/sys/conf/files.i386,v 1.500 2004/07/21 14:47:53 nyan Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -182,6 +182,7 @@
 i386/acpica/OsdEnvironment.c	optional	acpi
 i386/acpica/acpi_asus.c		optional	acpi_asus acpi
 i386/acpica/acpi_machdep.c	optional	acpi
+i386/acpica/acpi_panasonic.c	optional	acpi_panasonic acpi
 i386/acpica/acpi_toshiba.c	optional	acpi_toshiba acpi
 i386/acpica/acpi_wakeup.c	optional	acpi
 acpi_wakecode.h			optional	acpi			\

==== //depot/projects/netperf_socket/sys/conf/options#22 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.466 2004/07/18 18:21:39 kan Exp $
+# $FreeBSD: src/sys/conf/options,v 1.467 2004/07/20 12:42:54 glebius Exp $
 #
 #        On the handling of kernel options
 #
@@ -386,6 +386,7 @@
 NETGRAPH_BPF		opt_netgraph.h
 NETGRAPH_BRIDGE		opt_netgraph.h
 NETGRAPH_CISCO		opt_netgraph.h
+NETGRAPH_DEVICE		opt_netgraph.h
 NETGRAPH_ECHO		opt_netgraph.h
 NETGRAPH_EIFACE		opt_netgraph.h
 NETGRAPH_ETHER		opt_netgraph.h

==== //depot/projects/netperf_socket/sys/contrib/pf/net/pf.c#11 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$FreeBSD: src/sys/contrib/pf/net/pf.c,v 1.15 2004/07/18 14:25:48 mlaier Exp $	*/
+/*	$FreeBSD: src/sys/contrib/pf/net/pf.c,v 1.16 2004/07/23 03:31:42 mlaier Exp $	*/
 /*	$OpenBSD: pf.c,v 1.433.2.2 2004/07/17 03:22:34 brad Exp $ */
 
 /*
@@ -5573,15 +5573,22 @@
 
 #ifdef __FreeBSD__
 /*
- * XXX
- * FreeBSD supports cksum offload for the following drivers.
- * em(4), gx(4), lge(4), nge(4), ti(4), xl(4)
- * If we can make full use of it we would outperform ipfw/ipfilter in
- * very heavy traffic. 
- * I have not tested 'cause I don't have NICs that supports cksum offload.
- * (There might be problems. Typical phenomena would be
- *   1. No route message for UDP packet.
- *   2. No connection acceptance from external hosts regardless of rule set.)
+ * FreeBSD supports cksum offloads for the following drivers.
+ *  em(4), fxp(4), gx(4), ixgb(4), lge(4), ndis(4), nge(4), re(4),
+ *   ti(4), txp(4), xl(4)
+ *
+ * CSUM_DATA_VALID | CSUM_PSEUDO_HDR :
+ *  network driver performed cksum including pseudo header, need to verify
+ *   csum_data
+ * CSUM_DATA_VALID :
+ *  network driver performed cksum, needs to additional pseudo header
+ *  cksum computation with partial csum_data(i.e. lack of H/W support for
+ *  pseudo header, for instance hme(4), sk(4) and possibly gem(4))
+ *
+ * After validating the cksum of packet, set both flag CSUM_DATA_VALID and
+ * CSUM_PSEUDO_HDR in order to avoid recomputation of the cksum in upper
+ * TCP/UDP layer.
+ * Also, set csum_data to 0xffff to force cksum validation.
  */
 int
 pf_check_proto_cksum(struct mbuf *m, int off, int len, u_int8_t p, sa_family_t af)
@@ -5649,12 +5656,6 @@
 				if (m->m_len < sizeof(struct ip))
 					return (1);
 				sum = in4_cksum(m, p, off, len);
-				if (sum == 0) {
-					m->m_pkthdr.csum_flags |=

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



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