Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Oct 2003 22:29:39 -0700 (PDT)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 39126 for review
Message-ID:  <200310040529.h945TdoR054909@repoman.freebsd.org>

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

Change 39126 by marcel@marcel_nfs on 2003/10/03 22:29:10

	IFC @39124

Affected files ...

.. //depot/projects/uart/alpha/alpha/pmap.c#13 integrate
.. //depot/projects/uart/amd64/amd64/genassym.c#3 integrate
.. //depot/projects/uart/amd64/amd64/pmap.c#19 integrate
.. //depot/projects/uart/amd64/amd64/support.S#2 integrate
.. //depot/projects/uart/amd64/include/clock.h#3 integrate
.. //depot/projects/uart/amd64/include/ucontext.h#3 integrate
.. //depot/projects/uart/amd64/isa/clock.c#4 integrate
.. //depot/projects/uart/cam/scsi/scsi_cd.c#5 integrate
.. //depot/projects/uart/cam/scsi/scsi_targ_bh.c#3 integrate
.. //depot/projects/uart/cam/scsi/scsi_target.c#3 integrate
.. //depot/projects/uart/compat/linprocfs/linprocfs.c#7 integrate
.. //depot/projects/uart/conf/Makefile.amd64#2 integrate
.. //depot/projects/uart/conf/files#26 integrate
.. //depot/projects/uart/conf/kmod.mk#7 integrate
.. //depot/projects/uart/conf/ldscript.i386#2 integrate
.. //depot/projects/uart/dev/acpica/Osd/OsdSchedule.c#3 integrate
.. //depot/projects/uart/dev/ata/ata-lowlevel.c#10 integrate
.. //depot/projects/uart/dev/firewire/firewire.c#7 integrate
.. //depot/projects/uart/dev/firewire/firewire.h#5 integrate
.. //depot/projects/uart/dev/firewire/firewirereg.h#4 integrate
.. //depot/projects/uart/dev/firewire/fwcrom.c#4 integrate
.. //depot/projects/uart/dev/firewire/fwdev.c#5 integrate
.. //depot/projects/uart/dev/firewire/fwmem.c#4 integrate
.. //depot/projects/uart/dev/firewire/fwmem.h#2 integrate
.. //depot/projects/uart/dev/firewire/fwohci.c#10 integrate
.. //depot/projects/uart/dev/firewire/fwohcireg.h#4 integrate
.. //depot/projects/uart/dev/firewire/if_fwe.c#6 integrate
.. //depot/projects/uart/dev/firewire/sbp.c#9 integrate
.. //depot/projects/uart/dev/firewire/sbp.h#1 branch
.. //depot/projects/uart/dev/usb/ugen.c#7 integrate
.. //depot/projects/uart/dev/usb/uscanner.c#8 integrate
.. //depot/projects/uart/fs/procfs/procfs_dbregs.c#2 integrate
.. //depot/projects/uart/fs/procfs/procfs_fpregs.c#2 integrate
.. //depot/projects/uart/fs/procfs/procfs_regs.c#2 integrate
.. //depot/projects/uart/fs/pseudofs/pseudofs_vnops.c#4 integrate
.. //depot/projects/uart/i386/i386/bios.c#3 integrate
.. //depot/projects/uart/i386/i386/genassym.c#2 integrate
.. //depot/projects/uart/i386/i386/locore.s#4 integrate
.. //depot/projects/uart/i386/i386/machdep.c#6 integrate
.. //depot/projects/uart/i386/i386/mp_machdep.c#8 integrate
.. //depot/projects/uart/i386/i386/mpboot.s#2 integrate
.. //depot/projects/uart/i386/i386/pmap.c#20 integrate
.. //depot/projects/uart/i386/i386/support.s#3 integrate
.. //depot/projects/uart/i386/i386/swtch.s#3 integrate
.. //depot/projects/uart/i386/include/md_var.h#3 integrate
.. //depot/projects/uart/i386/include/pcb.h#2 integrate
.. //depot/projects/uart/i386/include/pmap.h#3 integrate
.. //depot/projects/uart/i386/include/vmparam.h#2 integrate
.. //depot/projects/uart/ia64/ia64/machdep.c#14 integrate
.. //depot/projects/uart/ia64/ia64/pmap.c#12 integrate
.. //depot/projects/uart/ia64/ia64/syscall.S#5 integrate
.. //depot/projects/uart/ia64/ia64/vm_machdep.c#7 integrate
.. //depot/projects/uart/kern/init_main.c#5 integrate
.. //depot/projects/uart/kern/kern_descrip.c#7 integrate
.. //depot/projects/uart/kern/kern_subr.c#2 integrate
.. //depot/projects/uart/kern/kern_synch.c#5 integrate
.. //depot/projects/uart/modules/firewire/sbp/Makefile#2 integrate
.. //depot/projects/uart/net/bpf.c#5 integrate
.. //depot/projects/uart/net/bridge.c#5 integrate
.. //depot/projects/uart/net/if.c#4 integrate
.. //depot/projects/uart/net/if.h#2 integrate
.. //depot/projects/uart/net/if_disc.c#2 integrate
.. //depot/projects/uart/net/if_faith.c#2 integrate
.. //depot/projects/uart/net/if_loop.c#3 integrate
.. //depot/projects/uart/net/if_stf.c#2 integrate
.. //depot/projects/uart/net/netisr.c#2 integrate
.. //depot/projects/uart/net/route.c#2 integrate
.. //depot/projects/uart/net/route.h#3 integrate
.. //depot/projects/uart/net/rtsock.c#2 integrate
.. //depot/projects/uart/netinet/if_atm.c#4 integrate
.. //depot/projects/uart/netinet/if_ether.c#3 integrate
.. //depot/projects/uart/netinet/in_pcb.c#3 integrate
.. //depot/projects/uart/netinet/in_proto.c#3 integrate
.. //depot/projects/uart/netinet/in_rmx.c#2 integrate
.. //depot/projects/uart/netinet/ip_dummynet.h#2 integrate
.. //depot/projects/uart/netinet/ip_flow.c#3 integrate
.. //depot/projects/uart/netinet/ip_icmp.c#3 integrate
.. //depot/projects/uart/netinet/ip_output.c#7 integrate
.. //depot/projects/uart/netinet6/frag6.c#2 integrate
.. //depot/projects/uart/netinet6/icmp6.c#2 integrate
.. //depot/projects/uart/netinet6/in6.c#2 integrate
.. //depot/projects/uart/netinet6/in6_ifattach.c#3 integrate
.. //depot/projects/uart/netinet6/in6_pcb.c#3 integrate
.. //depot/projects/uart/netinet6/in6_proto.c#2 integrate
.. //depot/projects/uart/netinet6/in6_rmx.c#2 integrate
.. //depot/projects/uart/netinet6/in6_src.c#2 integrate
.. //depot/projects/uart/netinet6/ip6_forward.c#3 integrate
.. //depot/projects/uart/netinet6/ip6_id.c#1 branch
.. //depot/projects/uart/netinet6/ip6_input.c#3 integrate
.. //depot/projects/uart/netinet6/ip6_output.c#3 integrate
.. //depot/projects/uart/netinet6/ip6_var.h#3 integrate
.. //depot/projects/uart/netinet6/ipsec.c#2 integrate
.. //depot/projects/uart/netinet6/nd6.c#4 integrate
.. //depot/projects/uart/netinet6/nd6_rtr.c#3 integrate
.. //depot/projects/uart/netipsec/ipsec.c#4 integrate
.. //depot/projects/uart/netipsec/ipsec.h#3 integrate
.. //depot/projects/uart/netipsec/ipsec_input.c#4 integrate
.. //depot/projects/uart/netipsec/ipsec_mbuf.c#2 integrate
.. //depot/projects/uart/netipsec/ipsec_osdep.h#1 branch
.. //depot/projects/uart/netipsec/ipsec_output.c#4 integrate
.. //depot/projects/uart/netipsec/key.c#4 integrate
.. //depot/projects/uart/netipsec/key_debug.c#2 integrate
.. //depot/projects/uart/netipsec/keydb.h#3 integrate
.. //depot/projects/uart/netipsec/keysock.c#2 integrate
.. //depot/projects/uart/netipsec/xform_ah.c#4 integrate
.. //depot/projects/uart/netipsec/xform_esp.c#4 integrate
.. //depot/projects/uart/netipsec/xform_ipcomp.c#4 integrate
.. //depot/projects/uart/netipsec/xform_ipip.c#2 integrate
.. //depot/projects/uart/netkey/key.c#3 integrate
.. //depot/projects/uart/netkey/key_debug.h#3 integrate
.. //depot/projects/uart/netkey/keysock.c#3 integrate
.. //depot/projects/uart/pci/agp_i810.c#3 integrate
.. //depot/projects/uart/powerpc/powerpc/pmap.c#8 integrate
.. //depot/projects/uart/sparc64/include/endian.h#2 integrate
.. //depot/projects/uart/sparc64/include/param.h#3 integrate
.. //depot/projects/uart/sparc64/sparc64/pmap.c#11 integrate
.. //depot/projects/uart/sys/cdefs.h#4 integrate
.. //depot/projects/uart/sys/mac.h#5 integrate
.. //depot/projects/uart/sys/proc.h#7 integrate
.. //depot/projects/uart/sys/systm.h#5 integrate
.. //depot/projects/uart/sys/uio.h#2 integrate
.. //depot/projects/uart/vm/pmap.h#6 integrate
.. //depot/projects/uart/vm/vm_fault.c#4 integrate

Differences ...

==== //depot/projects/uart/alpha/alpha/pmap.c#13 (text+ko) ====

@@ -148,7 +148,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.138 2003/09/12 07:07:47 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.139 2003/10/03 22:46:52 alc Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2093,105 +2093,6 @@
 }
 
 /*
- * pmap_prefault provides a quick way of clustering
- * pagefaults into a processes address space.  It is a "cousin"
- * of pmap_object_init_pt, except it runs at page fault time instead
- * of mmap time.
- */
-#define PFBAK 4
-#define PFFOR 4
-#define PAGEORDER_SIZE (PFBAK+PFFOR)
-
-static int pmap_prefault_pageorder[] = {
-	-1 * PAGE_SIZE, 1 * PAGE_SIZE,
-	-2 * PAGE_SIZE, 2 * PAGE_SIZE,
-	-3 * PAGE_SIZE, 3 * PAGE_SIZE,
-	-4 * PAGE_SIZE, 4 * PAGE_SIZE
-};
-
-void
-pmap_prefault(pmap, addra, entry)
-	pmap_t pmap;
-	vm_offset_t addra;
-	vm_map_entry_t entry;
-{
-	int i;
-	vm_offset_t starta;
-	vm_offset_t addr;
-	vm_pindex_t pindex;
-	vm_page_t m, mpte;
-	vm_object_t object;
-
-	if (!curthread || (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)))
-		return;
-
-	object = entry->object.vm_object;
-
-	starta = addra - PFBAK * PAGE_SIZE;
-	if (starta < entry->start) {
-		starta = entry->start;
-	} else if (starta > addra) {
-		starta = 0;
-	}
-
-	mpte = NULL;
-	for (i = 0; i < PAGEORDER_SIZE; i++) {
-		vm_object_t backing_object, lobject;
-		pt_entry_t *pte;
-
-		addr = addra + pmap_prefault_pageorder[i];
-		if (addr > addra + (PFFOR * PAGE_SIZE))
-			addr = 0;
-
-		if (addr < starta || addr >= entry->end)
-			continue;
-
-		if (!pmap_pte_v(pmap_lev1pte(pmap, addr))
-		    || !pmap_pte_v(pmap_lev2pte(pmap, addr)))
-			continue;
-
-		pte = vtopte(addr);
-		if (*pte)
-			continue;
-
-		pindex = ((addr - entry->start) + entry->offset) >> PAGE_SHIFT;
-		lobject = object;
-		VM_OBJECT_LOCK(lobject);
-		while ((m = vm_page_lookup(lobject, pindex)) == NULL &&
-		    lobject->type == OBJT_DEFAULT &&
-		    (backing_object = lobject->backing_object) != NULL) {
-			if (lobject->backing_object_offset & PAGE_MASK)
-				break;
-			pindex += lobject->backing_object_offset >> PAGE_SHIFT;
-			VM_OBJECT_LOCK(backing_object);
-			VM_OBJECT_UNLOCK(lobject);
-			lobject = backing_object;
-		}
-		VM_OBJECT_UNLOCK(lobject);
-		/*
-		 * give-up when a page is not in memory
-		 */
-		if (m == NULL)
-			break;
-		vm_page_lock_queues();
-		if (((m->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL) &&
-			(m->busy == 0) &&
-		    (m->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) {
-
-			if ((m->queue - m->pc) == PQ_CACHE) {
-				vm_page_deactivate(m);
-			}
-			vm_page_busy(m);
-			vm_page_unlock_queues();
-			mpte = pmap_enter_quick(pmap, addr, m, mpte);
-			vm_page_lock_queues();
-			vm_page_wakeup(m);
-		}
-		vm_page_unlock_queues();
-	}
-}
-
-/*
  *	Routine:	pmap_change_wiring
  *	Function:	Change the wiring attribute for a map/virtual-address
  *			pair.
@@ -2557,6 +2458,26 @@
 }
 
 /*
+ *	pmap_is_prefaultable:
+ *
+ *	Return whether or not the specified virtual address is elgible
+ *	for prefault.
+ */
+boolean_t
+pmap_is_prefaultable(pmap_t pmap, vm_offset_t addr)
+{
+	pt_entry_t *pte;
+
+	if (!pmap_pte_v(pmap_lev1pte(pmap, addr)) ||
+	    !pmap_pte_v(pmap_lev2pte(pmap, addr)))
+		return (FALSE);
+	pte = vtopte(addr);
+	if (*pte)
+		return (FALSE);
+	return (TRUE);
+}
+
+/*
  *	Clear the modify bits on the specified physical page.
  */
 void

==== //depot/projects/uart/amd64/amd64/genassym.c#3 (text+ko) ====

@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.148 2003/07/25 21:15:44 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.149 2003/09/30 04:52:24 jeff Exp $");
 
 #include "opt_compat.h"
 #include "opt_kstack_pages.h"
@@ -85,7 +85,6 @@
 ASSYM(TD_PROC, offsetof(struct thread, td_proc));
 ASSYM(TD_INTR_NESTING_LEVEL, offsetof(struct thread, td_intr_nesting_level));
 ASSYM(TD_CRITNEST, offsetof(struct thread, td_critnest));
-ASSYM(TD_SWITCHIN, offsetof(struct thread, td_switchin));
 ASSYM(TD_MD, offsetof(struct thread, td_md));
 
 ASSYM(P_MD, offsetof(struct proc, p_md));

==== //depot/projects/uart/amd64/amd64/pmap.c#19 (text+ko) ====

@@ -73,7 +73,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.440 2003/09/27 20:53:00 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.441 2003/10/03 22:46:52 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -2124,106 +2124,6 @@
 }
 
 /*
- * pmap_prefault provides a quick way of clustering
- * pagefaults into a processes address space.  It is a "cousin"
- * of pmap_object_init_pt, except it runs at page fault time instead
- * of mmap time.
- */
-#define PFBAK 4
-#define PFFOR 4
-#define PAGEORDER_SIZE (PFBAK+PFFOR)
-
-static int pmap_prefault_pageorder[] = {
-	-1 * PAGE_SIZE, 1 * PAGE_SIZE,
-	-2 * PAGE_SIZE, 2 * PAGE_SIZE,
-	-3 * PAGE_SIZE, 3 * PAGE_SIZE,
-	-4 * PAGE_SIZE, 4 * PAGE_SIZE
-};
-
-void
-pmap_prefault(pmap, addra, entry)
-	pmap_t pmap;
-	vm_offset_t addra;
-	vm_map_entry_t entry;
-{
-	int i;
-	vm_offset_t starta;
-	vm_offset_t addr;
-	vm_pindex_t pindex;
-	vm_page_t m, mpte;
-	vm_object_t object;
-	pd_entry_t *pde;
-
-	if (!curthread || (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)))
-		return;
-
-	object = entry->object.vm_object;
-
-	starta = addra - PFBAK * PAGE_SIZE;
-	if (starta < entry->start) {
-		starta = entry->start;
-	} else if (starta > addra) {
-		starta = 0;
-	}
-
-	mpte = NULL;
-	for (i = 0; i < PAGEORDER_SIZE; i++) {
-		vm_object_t backing_object, lobject;
-		pt_entry_t *pte;
-
-		addr = addra + pmap_prefault_pageorder[i];
-		if (addr > addra + (PFFOR * PAGE_SIZE))
-			addr = 0;
-
-		if (addr < starta || addr >= entry->end)
-			continue;
-
-		pde = pmap_pde(pmap, addr);
-		if (pde == NULL || (*pde & PG_V) == 0) 
-			continue;
-
-		pte = vtopte(addr);
-		if ((*pte & PG_V) == 0)
-			continue;
-
-		pindex = ((addr - entry->start) + entry->offset) >> PAGE_SHIFT;
-		lobject = object;
-		VM_OBJECT_LOCK(lobject);
-		while ((m = vm_page_lookup(lobject, pindex)) == NULL &&
-		    lobject->type == OBJT_DEFAULT &&
-		    (backing_object = lobject->backing_object) != NULL) {
-			if (lobject->backing_object_offset & PAGE_MASK)
-				break;
-			pindex += lobject->backing_object_offset >> PAGE_SHIFT;
-			VM_OBJECT_LOCK(backing_object);
-			VM_OBJECT_UNLOCK(lobject);
-			lobject = backing_object;
-		}
-		VM_OBJECT_UNLOCK(lobject);
-		/*
-		 * give-up when a page is not in memory
-		 */
-		if (m == NULL)
-			break;
-		vm_page_lock_queues();
-		if (((m->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL) &&
-			(m->busy == 0) &&
-		    (m->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) {
-
-			if ((m->queue - m->pc) == PQ_CACHE) {
-				vm_page_deactivate(m);
-			}
-			vm_page_busy(m);
-			vm_page_unlock_queues();
-			mpte = pmap_enter_quick(pmap, addr, m, mpte);
-			vm_page_lock_queues();
-			vm_page_wakeup(m);
-		}
-		vm_page_unlock_queues();
-	}
-}
-
-/*
  *	Routine:	pmap_change_wiring
  *	Function:	Change the wiring attribute for a map/virtual-address
  *			pair.
@@ -2598,6 +2498,27 @@
 }
 
 /*
+ *	pmap_is_prefaultable:
+ *
+ *	Return whether or not the specified virtual address is elgible
+ *	for prefault.
+ */
+boolean_t
+pmap_is_prefaultable(pmap_t pmap, vm_offset_t addr)
+{
+	pd_entry_t *pde;
+	pt_entry_t *pte;
+
+	pde = pmap_pde(pmap, addr);
+	if (pde == NULL || (*pde & PG_V) == 0) 
+		return (FALSE);
+	pte = vtopte(addr);
+	if ((*pte & PG_V) == 0)
+		return (FALSE);
+	return (TRUE);
+}
+
+/*
  *	Clear the given bit in each of the given page's ptes.
  */
 static __inline void

==== //depot/projects/uart/amd64/amd64/support.S#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/amd64/amd64/support.S,v 1.101 2003/05/30 00:58:48 peter Exp $
+ * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.102 2003/10/02 05:08:13 alc Exp $
  */
 
 #include "opt_ddb.h"
@@ -64,46 +64,18 @@
 
 /* Address: %rdi */
 ENTRY(pagezero)
-	movq	$512, %rcx
-	cld
-
-	ALIGN_TEXT
+	lea	4096(%rdi),%rsi
+	xorq	%rax,%rax
 1:
-	xorq	%rax, %rax
-	repe
-	scasq
-	jnz	2f
-
-	ret
-
-	ALIGN_TEXT
-
-2:
-	incq	%rcx
-	subq	$8, %rdi
-
-	movq	%rcx, %rdx
-	cmpq	$16, %rcx
-
-	jge	3f
-
-	movq	%rdi, %r8
-	andq	$0x7f, %r8
-	shrq	$3, %r8
-	movq	$16, %rcx
-	subq	%r8, %rcx
-
-3:
-	subq	%rcx, %rdx
-	rep
-	stosq
-
-	movq	%rdx, %rcx
-	testq	%rdx, %rdx
-	jnz	1b
-
-	ret
-
+	movnti	%rax,(%rdi)
+	movnti	%rax,8(%rdi)
+	movnti	%rax,16(%rdi)
+	movnti	%rax,24(%rdi)
+	addq	$32,%rdi
+	cmpq	%rsi,%rdi
+	jne	1b
+	sfence
+	retq
 
 ENTRY(bcmp)
 	xorq	%rax,%rax

==== //depot/projects/uart/amd64/include/clock.h#3 (text+ko) ====

@@ -3,7 +3,7 @@
  * Garrett Wollman, September 1994.
  * This file is in the public domain.
  *
- * $FreeBSD: src/sys/amd64/include/clock.h,v 1.46 2003/09/22 23:02:24 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/clock.h,v 1.47 2003/09/30 06:38:11 peter Exp $
  */
 
 #ifndef _MACHINE_CLOCK_H_
@@ -30,9 +30,11 @@
  */
 struct clockframe;
 
+#ifndef BURN_BRIDGES
 int	acquire_timer0(int rate, void (*function)(struct clockframe *frame));
+int	release_timer0(void);
+#endif
 int	acquire_timer2(int mode);
-int	release_timer0(void);
 int	release_timer2(void);
 int	rtcin(int val);
 int	sysbeep(int pitch, int period);

==== //depot/projects/uart/amd64/include/ucontext.h#3 (text+ko) ====

@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/include/ucontext.h,v 1.14 2003/09/05 20:47:27 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/ucontext.h,v 1.15 2003/10/01 01:08:04 peter Exp $
  */
 
 #ifndef _MACHINE_UCONTEXT_H_
@@ -37,30 +37,30 @@
 	 * sigcontext. So that we can support sigcontext
 	 * and ucontext_t at the same time.
 	 */
-	register_t	mc_onstack;		/* XXX - sigcontext compat. */
-	register_t	mc_rdi;			/* machine state (struct trapframe) */
-	register_t	mc_rsi;
-	register_t	mc_rdx;
-	register_t	mc_rcx;
-	register_t	mc_r8;
-	register_t	mc_r9;
-	register_t	mc_rax;
-	register_t	mc_rbx;
-	register_t	mc_rbp;
-	register_t	mc_r10;
-	register_t	mc_r11;
-	register_t	mc_r12;
-	register_t	mc_r13;
-	register_t	mc_r14;
-	register_t	mc_r15;
-	register_t	mc_trapno;
-	register_t	mc_addr;
-	register_t	mc_err;
-	register_t	mc_rip;
-	register_t	mc_cs;
-	register_t	mc_rflags;
-	register_t	mc_rsp;
-	register_t	mc_ss;
+	__register_t	mc_onstack;		/* XXX - sigcontext compat. */
+	__register_t	mc_rdi;			/* machine state (struct trapframe) */
+	__register_t	mc_rsi;
+	__register_t	mc_rdx;
+	__register_t	mc_rcx;
+	__register_t	mc_r8;
+	__register_t	mc_r9;
+	__register_t	mc_rax;
+	__register_t	mc_rbx;
+	__register_t	mc_rbp;
+	__register_t	mc_r10;
+	__register_t	mc_r11;
+	__register_t	mc_r12;
+	__register_t	mc_r13;
+	__register_t	mc_r14;
+	__register_t	mc_r15;
+	__register_t	mc_trapno;
+	__register_t	mc_addr;
+	__register_t	mc_err;
+	__register_t	mc_rip;
+	__register_t	mc_cs;
+	__register_t	mc_rflags;
+	__register_t	mc_rsp;
+	__register_t	mc_ss;
 
 	long	mc_len;			/* sizeof(mcontext_t) */
 #define	_MC_FPFMT_NODEV		0x10000	/* device not present or configured */

==== //depot/projects/uart/amd64/isa/clock.c#4 (text+ko) ====

@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/isa/clock.c,v 1.202 2003/09/22 23:02:24 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/isa/clock.c,v 1.204 2003/09/30 06:42:47 peter Exp $");
 
 /*
  * Routines to handle clock hardware.
@@ -87,11 +87,12 @@
  * 32-bit time_t's can't reach leap years before 1904 or after 2036, so we
  * can use a simple formula for leap years.
  */
-#define	LEAPYEAR(y) ((u_int)(y) % 4 == 0)
+#define	LEAPYEAR(y) (((u_int)(y) % 4 == 0) ? 1 : 0)
 #define DAYSPERYEAR   (31+28+31+30+31+30+31+31+30+31+30+31)
 
 #define	TIMER_DIV(x) ((timer_freq + (x) / 2) / (x))
 
+#ifndef BURN_BRIDGES
 /*
  * Time in timer cycles that it takes for microtime() to disable interrupts
  * and latch the count.  microtime() currently uses "cli; outb ..." so it
@@ -107,6 +108,7 @@
  * before the next timer interrupt.
  */
 #define	TIMER0_MAX_FREQ		20000
+#endif
 
 int	adjkerntz;		/* local offset from GMT in seconds */
 int	clkintr_pending;
@@ -128,6 +130,7 @@
 static	u_int32_t i8254_lastcount;
 static	u_int32_t i8254_offset;
 static	int	i8254_ticked;
+#ifndef BURN_BRIDGES
 /*
  * XXX new_function and timer_func should not handle clockframes, but
  * timer_func currently needs to hold hardclock to handle the
@@ -136,9 +139,11 @@
  */
 static	void	(*new_function)(struct clockframe *frame);
 static	u_int	new_rate;
+static	u_int	timer0_prescaler_count;
+static	u_char	timer0_state;
+#endif
 static	u_char	rtc_statusa = RTCSA_DIVIDER | RTCSA_NOPROF;
 static	u_char	rtc_statusb = RTCSB_24HR | RTCSB_PINTR;
-static	u_int	timer0_prescaler_count;
 
 /* Values for timerX_state: */
 #define	RELEASED	0
@@ -146,7 +151,6 @@
 #define	ACQUIRED	2
 #define	ACQUIRE_PENDING	3
 
-static	u_char	timer0_state;
 static	u_char	timer2_state;
 static	void	(*timer_func)(struct clockframe *frame) = hardclock;
 
@@ -158,7 +162,8 @@
 	0,			/* no poll_pps */
 	~0u,			/* counter_mask */
 	0,			/* frequency */
-	"i8254"			/* name */
+	"i8254",		/* name */
+	0			/* quality */
 };
 
 static void
@@ -177,6 +182,7 @@
 		mtx_unlock_spin(&clock_lock);
 	}
 	timer_func(&frame);
+#ifndef BURN_BRIDGES
 	switch (timer0_state) {
 
 	case RELEASED:
@@ -222,8 +228,10 @@
 		}
 		break;
 	}
+#endif
 }
 
+#ifndef BURN_BRIDGES
 /*
  * The acquire and release functions must be called at ipl >= splclock().
  */
@@ -259,6 +267,7 @@
 	old_rate = new_rate = rate;
 	return (0);
 }
+#endif
 
 int
 acquire_timer2(int mode)
@@ -280,6 +289,7 @@
 	return (0);
 }
 
+#ifndef BURN_BRIDGES
 int
 release_timer0()
 {
@@ -299,6 +309,7 @@
 	}
 	return (0);
 }
+#endif
 
 int
 release_timer2()
@@ -931,8 +942,10 @@
 	freq = timer_freq;
 	error = sysctl_handle_int(oidp, &freq, sizeof(freq), req);
 	if (error == 0 && req->newptr != NULL) {
+#ifndef BURN_BRIDGES
 		if (timer0_state != RELEASED)
 			return (EBUSY);	/* too much trouble to handle */
+#endif
 		set_timer_freq(freq, hz);
 		i8254_timecounter.tc_frequency = freq;
 	}

==== //depot/projects/uart/cam/scsi/scsi_cd.c#5 (text+ko) ====

@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.83 2003/09/11 19:27:24 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.84 2003/09/30 07:52:15 phk Exp $");
 
 #include "opt_cd.h"
 
@@ -63,6 +63,7 @@
 #include <sys/devicestat.h>
 #include <sys/sysctl.h>
 #include <sys/taskqueue.h>
+#include <geom/geom_disk.h>
 
 #include <cam/cam.h>
 #include <cam/cam_ccb.h>
@@ -146,15 +147,10 @@
 	struct cd_params	params;
 	union ccb		saved_ccb;
 	cd_quirks		quirks;
-	struct devstat		*device_stats;
 	STAILQ_ENTRY(cd_softc)	changer_links;
 	struct cdchanger	*changer;
 	int			bufs_left;
 	struct cam_periph	*periph;
-	dev_t			dev;
-#ifdef GONE_IN_5
-	eventhandler_tag	clonetag;
-#endif
 	int			minimum_command_size;
 	int			outstanding_cmds;
 	struct task		sysctl_task;
@@ -162,6 +158,7 @@
 	struct sysctl_oid	*sysctl_tree;
 	STAILQ_HEAD(, cd_mode_params)	mode_queue;
 	struct cd_tocdata	toc;
+	struct disk		disk;
 };
 
 struct cd_page_sizes {
@@ -217,12 +214,10 @@
 	}
 };
 
-#define CD_CDEV_MAJOR 15
-
-static	d_open_t	cdopen;
-static	d_close_t	cdclose;
-static	d_ioctl_t	cdioctl;
-static	d_strategy_t	cdstrategy;
+static	disk_open_t	cdopen;
+static	disk_close_t	cdclose;
+static	disk_ioctl_t	cdioctl;
+static	disk_strategy_t	cdstrategy;
 
 static	periph_init_t	cdinit;
 static	periph_ctor_t	cdregister;
@@ -294,17 +289,6 @@
 
 PERIPHDRIVER_DECLARE(cd, cddriver);
 
-static struct cdevsw cd_cdevsw = {
-	.d_open =	cdopen,
-	.d_close =	cdclose,
-	.d_read =	physread,
-	.d_write =	physwrite,
-	.d_ioctl =	cdioctl,
-	.d_strategy =	cdstrategy,
-	.d_name =	"cd",
-	.d_maj =	CD_CDEV_MAJOR,
-	.d_flags =	D_DISK,
-};
 
 static int num_changers;
 
@@ -343,27 +327,6 @@
 
 static STAILQ_HEAD(changerlist, cdchanger) changerq;
 
-#ifdef GONE_IN_5
-static void
-cdclone(void *arg, char *name, int namelen, dev_t *dev)
-{
-	struct cd_softc *softc;
-	const char *p;
-	int l;
-
-	softc = arg;
-	p = devtoname(softc->dev);
-	l = strlen(p);
-	if (bcmp(name, p, l))
-		return;
-	if (name[l] != 'a' && name[l] != 'c')
-		return;
-	if (name[l + 1] != '\0')
-		return;
-	*dev = softc->dev;
-	return;
-}
-#endif
 
 static void
 cdinit(void)
@@ -533,11 +496,6 @@
 		free(softc->changer, M_DEVBUF);
 		num_changers--;
 	}
-	devstat_remove_entry(softc->device_stats);
-	destroy_dev(softc->dev);
-#ifdef GONE_IN_5
-	EVENTHANDLER_DEREGISTER(dev_clone, softc->clonetag);
-#endif
 	free(softc, M_DEVBUF);
 	splx(s);
 }
@@ -774,18 +732,18 @@
 	 * WORM peripheral driver.  WORM drives will also have the WORM
 	 * driver attached to them.
 	 */
-	softc->device_stats = devstat_new_entry("cd", 
+	softc->disk.d_devstat = devstat_new_entry("cd", 
 			  periph->unit_number, 0,
 	  		  DEVSTAT_BS_UNAVAILABLE,
 			  DEVSTAT_TYPE_CDROM | DEVSTAT_TYPE_IF_SCSI,
 			  DEVSTAT_PRIORITY_CD);
-	softc->dev = make_dev(&cd_cdevsw, periph->unit_number,
-		UID_ROOT, GID_OPERATOR, 0640, "cd%d", periph->unit_number);
-	softc->dev->si_drv1 = periph;
-#ifdef GONE_IN_5
-	softc->clonetag =
-	    EVENTHANDLER_REGISTER(dev_clone, cdclone, softc, 1000);
-#endif
+	softc->disk.d_open = cdopen;
+	softc->disk.d_close = cdclose;
+	softc->disk.d_strategy = cdstrategy;
+	softc->disk.d_ioctl = cdioctl;
+	softc->disk.d_name = "cd";
+	disk_create(periph->unit_number, &softc->disk, 0, NULL, NULL);
+	softc->disk.d_drv1 = periph;
 
 	/*
 	 * Add an async callback so that we get
@@ -1028,14 +986,14 @@
 }
 
 static int
-cdopen(dev_t dev, int flags, int fmt, struct thread *td)
+cdopen(struct disk *dp)
 {
 	struct cam_periph *periph;
 	struct cd_softc *softc;
 	int error;
 	int s;
 
-	periph = (struct cam_periph *)dev->si_drv1;
+	periph = (struct cam_periph *)dp->d_drv1;
 	if (periph == NULL)
 		return (ENXIO);
 
@@ -1075,13 +1033,13 @@
 }
 
 static int
-cdclose(dev_t dev, int flag, int fmt, struct thread *td)
+cdclose(struct disk *dp)
 {
 	struct 	cam_periph *periph;
 	struct	cd_softc *softc;
 	int	error;
 
-	periph = (struct cam_periph *)dev->si_drv1;
+	periph = (struct cam_periph *)dp->d_drv1;
 	if (periph == NULL)
 		return (ENXIO);	
 
@@ -1097,7 +1055,7 @@
 	 * Since we're closing this CD, mark the blocksize as unavailable.
 	 * It will be marked as available when the CD is opened again.
 	 */
-	softc->device_stats->flags |= DEVSTAT_BS_UNAVAILABLE;
+	softc->disk.d_devstat->flags |= DEVSTAT_BS_UNAVAILABLE;
 
 	/*
 	 * We'll check the media and toc again at the next open().
@@ -1391,7 +1349,7 @@
 	softc = (struct cd_softc *)periph->softc;
 
 	error = cam_periph_runccb(ccb, error_routine, cam_flags, sense_flags,
-				  softc->device_stats);
+				  softc->disk.d_devstat);
 
 	if (softc->flags & CD_FLAG_CHANGER)
 		cdchangerschedule(softc);
@@ -1453,7 +1411,7 @@
 	struct cd_softc *softc;
 	int    s;
 
-	periph = (struct cam_periph *)bp->bio_dev->si_drv1;
+	periph = (struct cam_periph *)bp->bio_disk->d_drv1;
 	if (periph == NULL) {
 		biofinish(bp, NULL, ENXIO);
 		return;
@@ -1547,7 +1505,7 @@
 		} else {
 			bioq_remove(&softc->bio_queue, bp);
 
-			devstat_start_transaction_bio(softc->device_stats, bp);
+			devstat_start_transaction_bio(softc->disk.d_devstat, bp);
 
 			scsi_read_write(&start_ccb->csio,
 					/*retries*/4,
@@ -1703,7 +1661,7 @@
 		if (softc->flags & CD_FLAG_CHANGER)
 			cdchangerschedule(softc);
 
-		biofinish(bp, softc->device_stats, 0);
+		biofinish(bp, softc->disk.d_devstat, 0);
 		break;
 	}
 	case CD_CCB_PROBE:
@@ -1939,14 +1897,14 @@
 }
 
 static int
-cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
 {
 
 	struct 	cam_periph *periph;
 	struct	cd_softc *softc;
 	int	error;
 
-	periph = (struct cam_periph *)dev->si_drv1;
+	periph = (struct cam_periph *)dp->d_drv1;
 	if (periph == NULL)
 		return(ENXIO);	
 
@@ -1977,14 +1935,6 @@
 
 	switch (cmd) {
 
-	case DIOCGMEDIASIZE:
-		*(off_t *)addr =
-		    (off_t)softc->params.blksize * softc->params.disksize;
-		break;
-	case DIOCGSECTORSIZE:
-		*(u_int *)addr = softc->params.blksize;
-		break;
-
 	case CDIOCPLAYTRACKS:
 		{
 			struct ioc_play_track *args
@@ -2749,6 +2699,10 @@
 	}
 }
 
+/*
+ * XXX: the disk media and sector size is only really able to change
+ * XXX: while the device is closed.
+ */
 static int
 cdcheckmedia(struct cam_periph *periph)
 {
@@ -2761,6 +2715,9 @@

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



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