From owner-p4-projects@FreeBSD.ORG Thu Dec 28 13:35:09 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A850D16A49E; Thu, 28 Dec 2006 13:35:09 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E4C1016A407 for ; Thu, 28 Dec 2006 13:35:01 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 2F2E913C46D for ; Thu, 28 Dec 2006 13:35:01 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kBSDZ1P6025100 for ; Thu, 28 Dec 2006 13:35:01 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kBSDYvAZ025086 for perforce@freebsd.org; Thu, 28 Dec 2006 13:34:57 GMT (envelope-from jhb@freebsd.org) Date: Thu, 28 Dec 2006 13:34:57 GMT Message-Id: <200612281334.kBSDYvAZ025086@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 112214 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Dec 2006 13:35:10 -0000 http://perforce.freebsd.org/chv.cgi?CH=112214 Change 112214 by jhb@jhb_zion on 2006/12/28 13:34:32 IFC @112213. Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/apic_vector.S#15 integrate .. //depot/projects/smpng/sys/amd64/amd64/cpu_switch.S#16 integrate .. //depot/projects/smpng/sys/amd64/amd64/exception.S#17 integrate .. //depot/projects/smpng/sys/amd64/amd64/genassym.c#18 integrate .. //depot/projects/smpng/sys/amd64/amd64/local_apic.c#26 integrate .. //depot/projects/smpng/sys/amd64/amd64/machdep.c#63 integrate .. //depot/projects/smpng/sys/amd64/amd64/trap.c#57 integrate .. //depot/projects/smpng/sys/amd64/ia32/ia32_exception.S#4 integrate .. //depot/projects/smpng/sys/amd64/ia32/ia32_syscall.c#23 integrate .. //depot/projects/smpng/sys/amd64/include/apicvar.h#15 integrate .. //depot/projects/smpng/sys/amd64/include/atomic.h#29 integrate .. //depot/projects/smpng/sys/amd64/isa/atpic.c#15 integrate .. //depot/projects/smpng/sys/amd64/isa/atpic_vector.S#6 integrate .. //depot/projects/smpng/sys/amd64/isa/icu.h#7 integrate .. //depot/projects/smpng/sys/amd64/linux32/linux.h#7 integrate .. //depot/projects/smpng/sys/amd64/linux32/linux32_machdep.c#14 integrate .. //depot/projects/smpng/sys/boot/arm/at91/Makefile.inc#5 integrate .. //depot/projects/smpng/sys/boot/arm/at91/boot0spi/main.c#5 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/arm_init.S#2 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h#4 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/eeprom.c#3 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/emac.c#6 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/emac_init.c#4 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/lib.h#4 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/spi_flash.c#3 integrate .. //depot/projects/smpng/sys/boot/arm/at91/libat91/spi_flash.h#2 integrate .. //depot/projects/smpng/sys/boot/common/bootstrap.h#11 integrate .. //depot/projects/smpng/sys/boot/sparc64/loader/main.c#22 integrate .. //depot/projects/smpng/sys/cam/cam_xpt.c#40 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#44 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_proto.h#37 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_syscall.h#37 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_syscalls.c#37 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_sysent.c#37 integrate .. //depot/projects/smpng/sys/compat/freebsd32/syscalls.master#41 integrate .. //depot/projects/smpng/sys/compat/linux/linux_ipc.c#29 integrate .. //depot/projects/smpng/sys/compat/linux/linux_ipc.h#7 integrate .. //depot/projects/smpng/sys/compat/linux/linux_time.c#2 integrate .. //depot/projects/smpng/sys/compat/ndis/subr_ntoskrnl.c#42 integrate .. //depot/projects/smpng/sys/conf/files#194 integrate .. //depot/projects/smpng/sys/conf/files.amd64#50 integrate .. //depot/projects/smpng/sys/conf/files.arm#12 integrate .. //depot/projects/smpng/sys/conf/files.i386#105 integrate .. //depot/projects/smpng/sys/conf/files.pc98#87 integrate .. //depot/projects/smpng/sys/conf/files.powerpc#34 integrate .. //depot/projects/smpng/sys/conf/files.sparc64#59 integrate .. //depot/projects/smpng/sys/conf/files.sun4v#4 integrate .. //depot/projects/smpng/sys/conf/options#131 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_state.c#15 integrate .. //depot/projects/smpng/sys/dev/aac/aac_linux.c#4 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi_battery.c#19 integrate .. //depot/projects/smpng/sys/dev/ata/ata-queue.c#37 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath.c#47 integrate .. //depot/projects/smpng/sys/dev/ath/if_athvar.h#28 integrate .. //depot/projects/smpng/sys/dev/atkbdc/psm.c#5 integrate .. //depot/projects/smpng/sys/dev/bge/if_bge.c#85 integrate .. //depot/projects/smpng/sys/dev/bge/if_bgereg.h#49 integrate .. //depot/projects/smpng/sys/dev/dc/if_dc.c#13 integrate .. //depot/projects/smpng/sys/dev/if_ndis/if_ndis.c#42 integrate .. //depot/projects/smpng/sys/dev/isp/isp.c#50 integrate .. //depot/projects/smpng/sys/dev/isp/isp_freebsd.c#50 integrate .. //depot/projects/smpng/sys/dev/isp/isp_pci.c#46 integrate .. //depot/projects/smpng/sys/dev/isp/ispmbox.h#25 integrate .. //depot/projects/smpng/sys/dev/mii/brgphy.c#35 integrate .. //depot/projects/smpng/sys/dev/mii/rgephy.c#11 integrate .. //depot/projects/smpng/sys/dev/pci/pci.c#82 integrate .. //depot/projects/smpng/sys/dev/ral/rt2560.c#7 integrate .. //depot/projects/smpng/sys/dev/ral/rt2560var.h#2 integrate .. //depot/projects/smpng/sys/dev/ral/rt2661.c#5 integrate .. //depot/projects/smpng/sys/dev/ral/rt2661var.h#2 integrate .. //depot/projects/smpng/sys/dev/re/if_re.c#47 integrate .. //depot/projects/smpng/sys/dev/sound/pci/envy24.c#4 integrate .. //depot/projects/smpng/sys/dev/sound/pci/envy24ht.c#2 integrate .. //depot/projects/smpng/sys/dev/sound/pci/envy24ht.h#2 integrate .. //depot/projects/smpng/sys/dev/sound/pci/hda/hdac.c#5 integrate .. //depot/projects/smpng/sys/dev/sound/pci/ich.c#47 integrate .. //depot/projects/smpng/sys/dev/usb/if_aue.c#46 integrate .. //depot/projects/smpng/sys/dev/usb/if_auereg.h#13 integrate .. //depot/projects/smpng/sys/dev/usb/uplcom.c#28 integrate .. //depot/projects/smpng/sys/fs/msdosfs/bpb.h#5 integrate .. //depot/projects/smpng/sys/fs/udf/udf_vnops.c#35 integrate .. //depot/projects/smpng/sys/i386/i386/apic_vector.s#23 integrate .. //depot/projects/smpng/sys/i386/i386/exception.s#27 integrate .. //depot/projects/smpng/sys/i386/i386/genassym.c#35 integrate .. //depot/projects/smpng/sys/i386/i386/local_apic.c#47 integrate .. //depot/projects/smpng/sys/i386/i386/machdep.c#122 integrate .. //depot/projects/smpng/sys/i386/i386/swtch.s#29 integrate .. //depot/projects/smpng/sys/i386/i386/trap.c#104 integrate .. //depot/projects/smpng/sys/i386/i386/vm86.c#22 integrate .. //depot/projects/smpng/sys/i386/i386/vm86bios.s#7 integrate .. //depot/projects/smpng/sys/i386/include/apicvar.h#24 integrate .. //depot/projects/smpng/sys/i386/include/atomic.h#47 integrate .. //depot/projects/smpng/sys/i386/isa/atpic.c#18 integrate .. //depot/projects/smpng/sys/i386/isa/atpic_vector.s#14 integrate .. //depot/projects/smpng/sys/i386/isa/icu.h#13 integrate .. //depot/projects/smpng/sys/i386/linux/linux.h#14 integrate .. //depot/projects/smpng/sys/i386/linux/linux_proto.h#38 integrate .. //depot/projects/smpng/sys/i386/linux/linux_syscall.h#36 integrate .. //depot/projects/smpng/sys/i386/linux/linux_sysent.c#37 integrate .. //depot/projects/smpng/sys/i386/linux/syscalls.master#43 integrate .. //depot/projects/smpng/sys/ia64/ia64/machdep.c#108 integrate .. //depot/projects/smpng/sys/kern/kern_ktrace.c#56 integrate .. //depot/projects/smpng/sys/kern/kern_mac.c#47 integrate .. //depot/projects/smpng/sys/kern/kern_sig.c#129 integrate .. //depot/projects/smpng/sys/kern/kern_thread.c#97 integrate .. //depot/projects/smpng/sys/kern/kern_umtx.c#30 integrate .. //depot/projects/smpng/sys/kern/sched_4bsd.c#65 integrate .. //depot/projects/smpng/sys/kern/subr_sleepqueue.c#30 integrate .. //depot/projects/smpng/sys/kern/sys_pipe.c#57 integrate .. //depot/projects/smpng/sys/kern/sysv_msg.c#34 integrate .. //depot/projects/smpng/sys/kern/tty.c#69 integrate .. //depot/projects/smpng/sys/kern/uipc_mbuf.c#51 integrate .. //depot/projects/smpng/sys/kern/uipc_socket.c#97 integrate .. //depot/projects/smpng/sys/kern/vfs_bio.c#98 integrate .. //depot/projects/smpng/sys/kern/vfs_export.c#25 integrate .. //depot/projects/smpng/sys/kern/vfs_extattr.c#1 branch .. //depot/projects/smpng/sys/kern/vfs_mount.c#67 integrate .. //depot/projects/smpng/sys/kern/vfs_syscalls.c#120 integrate .. //depot/projects/smpng/sys/modules/Makefile#133 integrate .. //depot/projects/smpng/sys/modules/acpi/Makefile#31 integrate .. //depot/projects/smpng/sys/modules/acpi/acpi/Makefile#13 integrate .. //depot/projects/smpng/sys/modules/ufs/Makefile#5 integrate .. //depot/projects/smpng/sys/net/if_ethersubr.c#78 integrate .. //depot/projects/smpng/sys/net/if_media.h#20 integrate .. //depot/projects/smpng/sys/net80211/_ieee80211.h#5 integrate .. //depot/projects/smpng/sys/net80211/ieee80211.c#24 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_node.c#28 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_output.c#29 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_proto.c#21 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_var.h#23 integrate .. //depot/projects/smpng/sys/netgraph/ng_nat.c#6 integrate .. //depot/projects/smpng/sys/netgraph/ng_ppp.c#20 integrate .. //depot/projects/smpng/sys/netgraph/ng_ppp.h#6 integrate .. //depot/projects/smpng/sys/pci/if_rl.c#67 integrate .. //depot/projects/smpng/sys/powerpc/powerpc/mmu_oea.c#10 integrate .. //depot/projects/smpng/sys/security/mac/mac_framework.h#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_inet.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_internal.h#11 integrate .. //depot/projects/smpng/sys/security/mac/mac_label.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_net.c#17 integrate .. //depot/projects/smpng/sys/security/mac/mac_pipe.c#9 integrate .. //depot/projects/smpng/sys/security/mac/mac_policy.h#1 branch .. //depot/projects/smpng/sys/security/mac/mac_posix_sem.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_priv.c#2 integrate .. //depot/projects/smpng/sys/security/mac/mac_process.c#12 integrate .. //depot/projects/smpng/sys/security/mac/mac_socket.c#7 integrate .. //depot/projects/smpng/sys/security/mac/mac_system.c#8 integrate .. //depot/projects/smpng/sys/security/mac/mac_sysv_msg.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_sysv_sem.c#5 integrate .. //depot/projects/smpng/sys/security/mac/mac_sysv_shm.c#4 integrate .. //depot/projects/smpng/sys/security/mac/mac_vfs.c#15 integrate .. //depot/projects/smpng/sys/security/mac_biba/mac_biba.c#44 integrate .. //depot/projects/smpng/sys/security/mac_bsdextended/mac_bsdextended.c#21 integrate .. //depot/projects/smpng/sys/security/mac_ifoff/mac_ifoff.c#8 integrate .. //depot/projects/smpng/sys/security/mac_lomac/mac_lomac.c#34 integrate .. //depot/projects/smpng/sys/security/mac_mls/mac_mls.c#39 integrate .. //depot/projects/smpng/sys/security/mac_none/mac_none.c#14 integrate .. //depot/projects/smpng/sys/security/mac_partition/mac_partition.c#10 integrate .. //depot/projects/smpng/sys/security/mac_portacl/mac_portacl.c#10 integrate .. //depot/projects/smpng/sys/security/mac_seeotheruids/mac_seeotheruids.c#9 integrate .. //depot/projects/smpng/sys/security/mac_stub/mac_stub.c#19 integrate .. //depot/projects/smpng/sys/security/mac_test/mac_test.c#35 integrate .. //depot/projects/smpng/sys/sparc64/include/param.h#18 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/genassym.c#41 integrate .. //depot/projects/smpng/sys/sun4v/include/cddl/mdesc.h#2 integrate .. //depot/projects/smpng/sys/sun4v/include/pcpu.h#3 integrate .. //depot/projects/smpng/sys/sun4v/include/smp.h#3 integrate .. //depot/projects/smpng/sys/sun4v/mdesc/mdesc_init.c#4 integrate .. //depot/projects/smpng/sys/sun4v/mdesc/mdesc_vdevfindnode.c#1 branch .. //depot/projects/smpng/sys/sun4v/sun4v/exception.S#6 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/hcall.S#5 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/interrupt.S#5 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/mp_machdep.c#3 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/pmap.c#9 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/tick.c#2 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/trap.c#7 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/tsb.c#3 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/tte.c#3 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/tte_hash.c#6 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/wbuf.S#4 integrate .. //depot/projects/smpng/sys/sys/mac_policy.h#42 delete .. //depot/projects/smpng/sys/sys/mount.h#56 integrate .. //depot/projects/smpng/sys/sys/mouse.h#7 integrate .. //depot/projects/smpng/sys/sys/mutex.h#68 integrate .. //depot/projects/smpng/sys/sys/pcpu.h#18 integrate .. //depot/projects/smpng/sys/sys/syscallsubr.h#50 integrate .. //depot/projects/smpng/sys/sys/sysent.h#23 integrate .. //depot/projects/smpng/sys/sys/systm.h#76 integrate .. //depot/projects/smpng/sys/sys/umtx.h#20 integrate .. //depot/projects/smpng/sys/vm/vm_object.c#89 integrate Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/apic_vector.S#15 (text+ko) ==== @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * from: vector.s, 386BSD 0.1 unknown origin - * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.109 2006/05/01 21:36:46 jhb Exp $ + * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.110 2006/12/17 06:48:39 kmacy Exp $ */ /* @@ -60,6 +60,7 @@ jz 2f ; \ addl $(32 * index),%eax ; \ 1: ; \ + movq %rsp, %rsi ; \ movl %eax, %edi ; /* pass the IRQ */ \ call lapic_handle_intr ; \ MEXITCOUNT ; \ @@ -98,7 +99,7 @@ IDTVEC(timerint) PUSH_FRAME FAKE_MCOUNT(TF_RIP(%rsp)) - + movq %rsp, %rdi call lapic_handle_timer MEXITCOUNT jmp doreti ==== //depot/projects/smpng/sys/amd64/amd64/cpu_switch.S#16 (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/cpu_switch.S,v 1.154 2005/10/17 23:10:31 davidxu Exp $ + * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.155 2006/12/20 04:40:38 davidxu Exp $ */ #include @@ -206,6 +206,11 @@ movq %rbx, (%rax) movq %rbx, PCPU(RSP0) + movl TD_TID(%rsi), %eax + movq %r8, PCPU(CURPCB) + movl %eax, PCPU(CURTID) + movq %rsi, PCPU(CURTHREAD) /* into next thread */ + /* Restore context. */ movq PCB_RBX(%r8),%rbx movq PCB_RSP(%r8),%rsp @@ -217,9 +222,6 @@ movq PCB_RIP(%r8),%rax movq %rax,(%rsp) - movq %r8, PCPU(CURPCB) - movq %rsi, PCPU(CURTHREAD) /* into next thread */ - /* Test if debug registers should be restored. */ testl $PCB_DBREGS,PCB_FLAGS(%r8) jz 1f ==== //depot/projects/smpng/sys/amd64/amd64/exception.S#17 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.127 2005/08/27 16:03:40 jkoshy Exp $ + * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.129 2006/12/23 03:30:50 davidxu Exp $ */ #include "opt_atpic.h" @@ -165,6 +165,7 @@ .globl calltrap .type calltrap,@function calltrap: + movq %rsp, %rdi call trap MEXITCOUNT jmp doreti /* Handle any pending ASTs */ @@ -267,6 +268,7 @@ movq %r14,TF_R14(%rsp) /* C preserved */ movq %r15,TF_R15(%rsp) /* C preserved */ FAKE_MCOUNT(TF_RIP(%rsp)) + movq %rsp, %rdi call syscall movq PCPU(CURPCB),%rax testq $PCB_FULLCTX,PCB_FLAGS(%rax) @@ -363,6 +365,7 @@ /* Note: this label is also used by ddb and gdb: */ nmi_calltrap: FAKE_MCOUNT(TF_RIP(%rsp)) + movq %rsp, %rdi call trap MEXITCOUNT testl %ebx,%ebx ==== //depot/projects/smpng/sys/amd64/amd64/genassym.c#18 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.159 2006/11/30 04:17:04 jb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.160 2006/12/20 04:40:38 davidxu Exp $"); #include "opt_compat.h" #include "opt_kstack_pages.h" @@ -79,6 +79,7 @@ ASSYM(TD_FLAGS, offsetof(struct thread, td_flags)); ASSYM(TD_PCB, offsetof(struct thread, td_pcb)); ASSYM(TD_PROC, offsetof(struct thread, td_proc)); +ASSYM(TD_TID, offsetof(struct thread, td_tid)); ASSYM(TDF_ASTPENDING, TDF_ASTPENDING); ASSYM(TDF_NEEDRESCHED, TDF_NEEDRESCHED); @@ -190,6 +191,7 @@ ASSYM(PC_CURPMAP, offsetof(struct pcpu, pc_curpmap)); ASSYM(PC_TSSP, offsetof(struct pcpu, pc_tssp)); ASSYM(PC_RSP0, offsetof(struct pcpu, pc_rsp0)); +ASSYM(PC_CURTID, offsetof(struct pcpu, pc_curtid)); ASSYM(LA_VER, offsetof(struct LAPIC, version)); ASSYM(LA_TPR, offsetof(struct LAPIC, tpr)); ==== //depot/projects/smpng/sys/amd64/amd64/local_apic.c#26 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.33 2006/11/13 22:23:32 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.34 2006/12/17 06:48:39 kmacy Exp $"); #include "opt_hwpmc_hooks.h" @@ -610,18 +610,18 @@ } void -lapic_handle_intr(int vector, struct trapframe frame) +lapic_handle_intr(int vector, struct trapframe *frame) { struct intsrc *isrc; if (vector == -1) panic("Couldn't get vector from ISR!"); isrc = intr_lookup_source(apic_idt_to_irq(vector)); - intr_execute_handlers(isrc, &frame); + intr_execute_handlers(isrc, frame); } void -lapic_handle_timer(struct trapframe frame) +lapic_handle_timer(struct trapframe *frame) { struct lapic *la; @@ -654,16 +654,16 @@ if (la->la_hard_ticks >= lapic_timer_hz) { la->la_hard_ticks -= lapic_timer_hz; if (PCPU_GET(cpuid) == 0) - hardclock(TRAPF_USERMODE(&frame), TRAPF_PC(&frame)); + hardclock(TRAPF_USERMODE(frame), TRAPF_PC(frame)); else - hardclock_cpu(TRAPF_USERMODE(&frame)); + hardclock_cpu(TRAPF_USERMODE(frame)); } /* Fire statclock at stathz. */ la->la_stat_ticks += stathz; if (la->la_stat_ticks >= lapic_timer_hz) { la->la_stat_ticks -= lapic_timer_hz; - statclock(TRAPF_USERMODE(&frame)); + statclock(TRAPF_USERMODE(frame)); } /* Fire profclock at profhz, but only when needed. */ @@ -671,7 +671,7 @@ if (la->la_prof_ticks >= lapic_timer_hz) { la->la_prof_ticks -= lapic_timer_hz; if (profprocs != 0) - profclock(TRAPF_USERMODE(&frame), TRAPF_PC(&frame)); + profclock(TRAPF_USERMODE(frame), TRAPF_PC(frame)); } critical_exit(); } ==== //depot/projects/smpng/sys/amd64/amd64/machdep.c#63 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.666 2006/12/06 18:27:17 sobomax Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.667 2006/12/20 04:40:38 davidxu Exp $"); #include "opt_atalk.h" #include "opt_atpic.h" @@ -1164,6 +1164,7 @@ PCPU_SET(prvspace, pc); PCPU_SET(curthread, &thread0); PCPU_SET(curpcb, thread0.td_pcb); + PCPU_SET(curtid, thread0.td_tid); PCPU_SET(tssp, &common_tss[0]); /* ==== //depot/projects/smpng/sys/amd64/amd64/trap.c#57 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.312 2006/11/28 20:04:00 ru Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.313 2006/12/17 06:48:39 kmacy Exp $"); /* * AMD64 Trap and System call handling @@ -94,8 +94,8 @@ #endif #include -extern void trap(struct trapframe frame); -extern void syscall(struct trapframe frame); +extern void trap(struct trapframe *frame); +extern void syscall(struct trapframe *frame); static int trap_pfault(struct trapframe *, int); static void trap_fatal(struct trapframe *, vm_offset_t); @@ -155,8 +155,7 @@ */ void -trap(frame) - struct trapframe frame; +trap(struct trapframe *frame) { struct thread *td = curthread; struct proc *p = td->td_proc; @@ -165,7 +164,7 @@ ksiginfo_t ksi; PCPU_LAZY_INC(cnt.v_trap); - type = frame.tf_trapno; + type = frame->tf_trapno; #ifdef SMP #ifdef STOP_NMI @@ -192,12 +191,12 @@ * the NMI was handled by it and we can return immediately. */ if (type == T_NMI && pmc_intr && - (*pmc_intr)(PCPU_GET(cpuid), (uintptr_t) frame.tf_rip, - TRAPF_USERMODE(&frame))) + (*pmc_intr)(PCPU_GET(cpuid), (uintptr_t) frame->tf_rip, + TRAPF_USERMODE(frame))) goto out; #endif - if ((frame.tf_rflags & PSL_I) == 0) { + if ((frame->tf_rflags & PSL_I) == 0) { /* * Buggy application or kernel code has disabled * interrupts and then trapped. Enabling interrupts @@ -205,7 +204,7 @@ * interrupts disabled until they are accidentally * enabled later. */ - if (ISPL(frame.tf_cs) == SEL_UPL) + if (ISPL(frame->tf_cs) == SEL_UPL) printf( "pid %ld (%s): trap %d with interrupts disabled\n", (long)curproc->p_pid, curproc->p_comm, type); @@ -226,7 +225,7 @@ } } - code = frame.tf_err; + code = frame->tf_err; if (type == T_PAGEFLT) { /* * If we get a page fault while in a critical section, then @@ -245,15 +244,15 @@ if (td->td_critnest != 0 || WITNESS_CHECK(WARN_SLEEPOK | WARN_GIANTOK, NULL, "Kernel page fault") != 0) - trap_fatal(&frame, frame.tf_addr); + trap_fatal(frame, frame->tf_addr); } - if (ISPL(frame.tf_cs) == SEL_UPL) { + if (ISPL(frame->tf_cs) == SEL_UPL) { /* user trap */ td->td_pticks = 0; - td->td_frame = &frame; - addr = frame.tf_rip; + td->td_frame = frame; + addr = frame->tf_rip; if (td->td_ucred != p->p_ucred) cred_update_thread(td); @@ -266,7 +265,7 @@ case T_BPTFLT: /* bpt instruction fault */ case T_TRCTRAP: /* trace trap */ enable_intr(); - frame.tf_rflags &= ~PSL_T; + frame->tf_rflags &= ~PSL_T; i = SIGTRAP; ucode = (type == T_TRCTRAP ? TRAP_TRACE : TRAP_BRKPT); break; @@ -298,12 +297,12 @@ break; case T_PAGEFLT: /* page fault */ - addr = frame.tf_addr; + addr = frame->tf_addr; #ifdef KSE if (td->td_pflags & TDP_SA) thread_user_enter(td); #endif - i = trap_pfault(&frame, TRUE); + i = trap_pfault(frame, TRUE); if (i == -1) goto userout; if (i == 0) @@ -334,7 +333,7 @@ */ if (kdb_on_nmi) { printf ("NMI ... going to debugger\n"); - kdb_trap(type, 0, &frame); + kdb_trap(type, 0, frame); } #endif /* KDB */ goto userout; @@ -380,7 +379,7 @@ ("kernel trap doesn't have ucred")); switch (type) { case T_PAGEFLT: /* page fault */ - (void) trap_pfault(&frame, FALSE); + (void) trap_pfault(frame, FALSE); goto out; case T_DNA: @@ -413,12 +412,12 @@ * selectors and pointers when the user changes * them. */ - if (frame.tf_rip == (long)doreti_iret) { - frame.tf_rip = (long)doreti_iret_fault; + if (frame->tf_rip == (long)doreti_iret) { + frame->tf_rip = (long)doreti_iret_fault; goto out; } if (PCPU_GET(curpcb)->pcb_onfault != NULL) { - frame.tf_rip = + frame->tf_rip = (long)PCPU_GET(curpcb)->pcb_onfault; goto out; } @@ -434,8 +433,8 @@ * problem here and not every time the kernel is * entered. */ - if (frame.tf_rflags & PSL_NT) { - frame.tf_rflags &= ~PSL_NT; + if (frame->tf_rflags & PSL_NT) { + frame->tf_rflags &= ~PSL_NT; goto out; } break; @@ -470,7 +469,7 @@ */ #ifdef KDB /* XXX Giant */ - if (kdb_trap(type, 0, &frame)) + if (kdb_trap(type, 0, frame)) goto out; #endif break; @@ -487,7 +486,7 @@ */ if (kdb_on_nmi) { printf ("NMI ... going to debugger\n"); - kdb_trap(type, 0, &frame); + kdb_trap(type, 0, frame); } #endif /* KDB */ goto out; @@ -497,7 +496,7 @@ #endif /* DEV_ISA */ } - trap_fatal(&frame, 0); + trap_fatal(frame, 0); goto out; } @@ -517,13 +516,13 @@ uprintf("fatal process exception: %s", trap_msg[type]); if ((type == T_PAGEFLT) || (type == T_PROTFLT)) - uprintf(", fault VA = 0x%lx", frame.tf_addr); + uprintf(", fault VA = 0x%lx", frame->tf_addr); uprintf("\n"); } #endif user: - userret(td, &frame); + userret(td, frame); mtx_assert(&Giant, MA_NOTOWNED); userout: out: @@ -723,8 +722,7 @@ * A system call is essentially treated as a trap. */ void -syscall(frame) - struct trapframe frame; +syscall(struct trapframe *frame) { caddr_t params; struct sysent *callp; @@ -746,7 +744,7 @@ PCPU_LAZY_INC(cnt.v_syscall); #ifdef DIAGNOSTIC - if (ISPL(frame.tf_cs) != SEL_UPL) { + if (ISPL(frame->tf_cs) != SEL_UPL) { mtx_lock(&Giant); /* try to stabilize the system XXX */ panic("syscall"); /* NOT REACHED */ @@ -757,25 +755,25 @@ reg = 0; regcnt = 6; td->td_pticks = 0; - td->td_frame = &frame; + td->td_frame = frame; if (td->td_ucred != p->p_ucred) cred_update_thread(td); #ifdef KSE if (p->p_flag & P_SA) thread_user_enter(td); #endif - params = (caddr_t)frame.tf_rsp + sizeof(register_t); - code = frame.tf_rax; - orig_tf_rflags = frame.tf_rflags; + params = (caddr_t)frame->tf_rsp + sizeof(register_t); + code = frame->tf_rax; + orig_tf_rflags = frame->tf_rflags; if (p->p_sysent->sv_prepsyscall) { /* * The prep code is MP aware. */ - (*p->p_sysent->sv_prepsyscall)(&frame, (int *)args, &code, ¶ms); + (*p->p_sysent->sv_prepsyscall)(frame, (int *)args, &code, ¶ms); } else { if (code == SYS_syscall || code == SYS___syscall) { - code = frame.tf_rdi; + code = frame->tf_rdi; reg++; regcnt--; } @@ -797,7 +795,7 @@ KASSERT(narg <= sizeof(args) / sizeof(args[0]), ("Too many syscall arguments!")); error = 0; - argp = &frame.tf_rdi; + argp = &frame->tf_rdi; argp += reg; bcopy(argp, args, sizeof(args[0]) * regcnt); if (narg > regcnt) { @@ -817,7 +815,7 @@ if (error == 0) { td->td_retval[0] = 0; - td->td_retval[1] = frame.tf_rdx; + td->td_retval[1] = frame->tf_rdx; STOPEVENT(p, S_SCE, narg); @@ -830,9 +828,9 @@ switch (error) { case 0: - frame.tf_rax = td->td_retval[0]; - frame.tf_rdx = td->td_retval[1]; - frame.tf_rflags &= ~PSL_C; + frame->tf_rax = td->td_retval[0]; + frame->tf_rdx = td->td_retval[1]; + frame->tf_rflags &= ~PSL_C; break; case ERESTART: @@ -842,8 +840,8 @@ * (which was holding the value of %rcx) is restored for * the next iteration. */ - frame.tf_rip -= frame.tf_err; - frame.tf_r10 = frame.tf_rcx; + frame->tf_rip -= frame->tf_err; + frame->tf_r10 = frame->tf_rcx; td->td_pcb->pcb_flags |= PCB_FULLCTX; break; @@ -857,8 +855,8 @@ else error = p->p_sysent->sv_errtbl[error]; } - frame.tf_rax = error; - frame.tf_rflags |= PSL_C; + frame->tf_rax = error; + frame->tf_rflags |= PSL_C; break; } @@ -866,11 +864,11 @@ * Traced syscall. */ if (orig_tf_rflags & PSL_T) { - frame.tf_rflags &= ~PSL_T; + frame->tf_rflags &= ~PSL_T; ksiginfo_init_trap(&ksi); ksi.ksi_signo = SIGTRAP; ksi.ksi_code = TRAP_TRACE; - ksi.ksi_addr = (void *)frame.tf_rip; + ksi.ksi_addr = (void *)frame->tf_rip; trapsignal(td, &ksi); } @@ -890,7 +888,7 @@ /* * Handle reschedule and other end-of-syscall issues */ - userret(td, &frame); + userret(td, frame); CTR4(KTR_SYSC, "syscall exit thread %p pid %d proc %s code %d", td, td->td_proc->p_pid, td->td_proc->p_comm, code); ==== //depot/projects/smpng/sys/amd64/ia32/ia32_exception.S#4 (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/amd64/ia32/ia32_exception.S,v 1.4 2004/05/24 11:28:11 bde Exp $ + * $FreeBSD: src/sys/amd64/ia32/ia32_exception.S,v 1.5 2006/12/17 06:48:39 kmacy Exp $ */ #include @@ -61,6 +61,7 @@ movq %r14,TF_R14(%rsp) movq %r15,TF_R15(%rsp) FAKE_MCOUNT(TF_RIP(%rsp)) + movq %rsp, %rdi call ia32_syscall MEXITCOUNT jmp doreti ==== //depot/projects/smpng/sys/amd64/ia32/ia32_syscall.c#23 (text+ko) ==== @@ -36,7 +36,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_syscall.c,v 1.16 2006/07/28 20:22:57 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_syscall.c,v 1.17 2006/12/17 06:48:39 kmacy Exp $"); /* * 386 Trap and System call handling @@ -86,10 +86,10 @@ extern inthand_t IDTVEC(int0x80_syscall), IDTVEC(rsvd); extern const char *freebsd32_syscallnames[]; -void ia32_syscall(struct trapframe frame); /* Called from asm code */ +void ia32_syscall(struct trapframe *frame); /* Called from asm code */ void -ia32_syscall(struct trapframe frame) +ia32_syscall(struct trapframe *frame) { caddr_t params; int i; @@ -111,18 +111,18 @@ PCPU_LAZY_INC(cnt.v_syscall); td->td_pticks = 0; - td->td_frame = &frame; + td->td_frame = frame; if (td->td_ucred != p->p_ucred) cred_update_thread(td); - params = (caddr_t)frame.tf_rsp + sizeof(u_int32_t); - code = frame.tf_rax; - orig_tf_rflags = frame.tf_rflags; + params = (caddr_t)frame->tf_rsp + sizeof(u_int32_t); + code = frame->tf_rax; + orig_tf_rflags = frame->tf_rflags; if (p->p_sysent->sv_prepsyscall) { /* * The prep code is MP aware. */ - (*p->p_sysent->sv_prepsyscall)(&frame, args, &code, ¶ms); + (*p->p_sysent->sv_prepsyscall)(frame, args, &code, ¶ms); } else { /* * Need to check if this is a 32 bit or 64 bit syscall. @@ -177,7 +177,7 @@ if (error == 0) { td->td_retval[0] = 0; - td->td_retval[1] = frame.tf_rdx; + td->td_retval[1] = frame->tf_rdx; STOPEVENT(p, S_SCE, narg); @@ -190,9 +190,9 @@ switch (error) { case 0: - frame.tf_rax = td->td_retval[0]; - frame.tf_rdx = td->td_retval[1]; - frame.tf_rflags &= ~PSL_C; + frame->tf_rax = td->td_retval[0]; + frame->tf_rdx = td->td_retval[1]; + frame->tf_rflags &= ~PSL_C; break; case ERESTART: @@ -200,7 +200,7 @@ * Reconstruct pc, assuming lcall $X,y is 7 bytes, * int 0x80 is 2 bytes. We saved this in tf_err. */ - frame.tf_rip -= frame.tf_err; + frame->tf_rip -= frame->tf_err; break; case EJUSTRETURN: @@ -213,8 +213,8 @@ else error = p->p_sysent->sv_errtbl[error]; } - frame.tf_rax = error; - frame.tf_rflags |= PSL_C; + frame->tf_rax = error; + frame->tf_rflags |= PSL_C; break; } @@ -222,11 +222,11 @@ * Traced syscall. */ if (orig_tf_rflags & PSL_T) { - frame.tf_rflags &= ~PSL_T; + frame->tf_rflags &= ~PSL_T; ksiginfo_init_trap(&ksi); ksi.ksi_signo = SIGTRAP; ksi.ksi_code = TRAP_TRACE; - ksi.ksi_addr = (void *)frame.tf_rip; + ksi.ksi_addr = (void *)frame->tf_rip; trapsignal(td, &ksi); } @@ -246,7 +246,7 @@ /* * Handle reschedule and other end-of-syscall issues */ - userret(td, &frame); + userret(td, frame); CTR4(KTR_SYSC, "syscall exit thread %p pid %d proc %s code %d", td, td->td_proc->p_pid, td->td_proc->p_comm, code); ==== //depot/projects/smpng/sys/amd64/include/apicvar.h#15 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.20 2006/11/13 22:23:33 jhb Exp $ + * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.21 2006/12/17 06:48:40 kmacy Exp $ */ #ifndef _MACHINE_APICVAR_H_ @@ -202,8 +202,8 @@ void lapic_ipi_raw(register_t icrlo, u_int dest); void lapic_ipi_vectored(u_int vector, int dest); int lapic_ipi_wait(int delay); -void lapic_handle_intr(int vector, struct trapframe frame); -void lapic_handle_timer(struct trapframe frame); +void lapic_handle_intr(int vector, struct trapframe *frame); +void lapic_handle_timer(struct trapframe *frame); void lapic_set_logical_id(u_int apic_id, u_int cluster, u_int cluster_id); int lapic_set_lvt_mask(u_int apic_id, u_int lvt, u_char masked); int lapic_set_lvt_mode(u_int apic_id, u_int lvt, u_int32_t mode); ==== //depot/projects/smpng/sys/amd64/include/atomic.h#29 (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/amd64/include/atomic.h,v 1.39 2005/09/27 17:39:10 jhb Exp $ + * $FreeBSD: src/sys/amd64/include/atomic.h,v 1.41 2006/12/28 08:15:14 bde Exp $ */ #ifndef _MACHINE_ATOMIC_H_ #define _MACHINE_ATOMIC_H_ @@ -67,7 +67,7 @@ * Kernel modules call real functions which are built into the kernel. * This allows kernel modules to be portable between UP and SMP systems. */ -#if defined(KLD_MODULE) || !(defined(__GNUCLIKE_ASM) && defined(__CC_SUPPORTS___INLINE)) +#if defined(KLD_MODULE) || !defined(__GNUCLIKE_ASM) #define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \ void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v) @@ -79,7 +79,7 @@ u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p); \ void atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v) -#else /* !KLD_MODULE && __GNUCLIKE_ASM && __CC_SUPPORTS___INLINE */ +#else /* !KLD_MODULE && __GNUCLIKE_ASM */ /* * For userland, assume the SMP case and use lock prefixes so that @@ -116,19 +116,19 @@ static __inline int atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src) { - int res = exp; + u_char res; __asm __volatile ( " " __XSTRING(MPLOCKED) " " " cmpxchgl %2,%1 ; " - " setz %%al ; " - " movzbl %%al,%0 ; " + " sete %0 ; " "1: " "# atomic_cmpset_int" - : "+a" (res), /* 0 (result) */ + : "=a" (res), /* 0 */ "=m" (*dst) /* 1 */ : "r" (src), /* 2 */ - "m" (*dst) /* 3 */ + "a" (exp), /* 3 */ + "m" (*dst) /* 4 */ : "memory"); return (res); @@ -137,19 +137,19 @@ static __inline int atomic_cmpset_long(volatile u_long *dst, u_long exp, u_long src) { - long res = exp; + u_char res; __asm __volatile ( " " __XSTRING(MPLOCKED) " " " cmpxchgq %2,%1 ; " - " setz %%al ; " - " movzbq %%al,%0 ; " + " sete %0 ; " "1: " "# atomic_cmpset_long" - : "+a" (res), /* 0 (result) */ + : "=a" (res), /* 0 */ "=m" (*dst) /* 1 */ : "r" (src), /* 2 */ - "m" (*dst) /* 3 */ + "a" (exp), /* 3 */ + "m" (*dst) /* 4 */ : "memory"); return (res); @@ -209,7 +209,7 @@ : "=a" (res), /* 0 (result) */\ "=m" (*p) /* 1 */ \ : "m" (*p) /* 2 */ \ - : "memory"); \ + : "memory"); \ \ return (res); \ } \ @@ -229,7 +229,7 @@ #endif /* SMP */ -#endif /* KLD_MODULE || !(__GNUCLIKE_ASM && __CC_SUPPORTS___INLINE) */ +#endif /* KLD_MODULE || !__GNUCLIKE_ASM */ ATOMIC_ASM(set, char, "orb %b1,%0", "iq", v); ATOMIC_ASM(clear, char, "andb %b1,%0", "iq", ~v); @@ -262,7 +262,7 @@ #if !defined(WANT_FUNCTIONS) >>> TRUNCATED FOR MAIL (1000 lines) <<<