PERFORCE change 39126 for review
Marcel Moolenaar
marcel at FreeBSD.org
Fri Oct 3 22:29:43 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=39126
Change 39126 by marcel at 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) <<<
More information about the p4-projects
mailing list