From owner-svn-src-head@FreeBSD.ORG Wed Dec 22 19:57:03 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB5601065674; Wed, 22 Dec 2010 19:57:03 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA1528FC1A; Wed, 22 Dec 2010 19:57:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBMJv39S032892; Wed, 22 Dec 2010 19:57:03 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBMJv3QE032888; Wed, 22 Dec 2010 19:57:03 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201012221957.oBMJv3QE032888@svn.freebsd.org> From: Jung-uk Kim Date: Wed, 22 Dec 2010 19:57:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216673 - in head/sys/amd64: amd64 include X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Dec 2010 19:57:03 -0000 Author: jkim Date: Wed Dec 22 19:57:03 2010 New Revision: 216673 URL: http://svn.freebsd.org/changeset/base/216673 Log: Increase size of pcb_flags to four bytes. Requested by: bde, jhb Modified: head/sys/amd64/amd64/cpu_switch.S head/sys/amd64/amd64/exception.S head/sys/amd64/include/pcb.h Modified: head/sys/amd64/amd64/cpu_switch.S ============================================================================== --- head/sys/amd64/amd64/cpu_switch.S Wed Dec 22 19:04:14 2010 (r216672) +++ head/sys/amd64/amd64/cpu_switch.S Wed Dec 22 19:57:03 2010 (r216673) @@ -94,7 +94,7 @@ END(cpu_throw) ENTRY(cpu_switch) /* Switch to new thread. First, save context. */ movq TD_PCB(%rdi),%r8 - orb $PCB_FULL_IRET,PCB_FLAGS(%r8) + orl $PCB_FULL_IRET,PCB_FLAGS(%r8) movq (%rsp),%rax /* Hardware registers */ movq %r15,PCB_R15(%r8) @@ -106,7 +106,7 @@ ENTRY(cpu_switch) movq %rbx,PCB_RBX(%r8) movq %rax,PCB_RIP(%r8) - testb $PCB_DBREGS,PCB_FLAGS(%r8) + testl $PCB_DBREGS,PCB_FLAGS(%r8) jnz store_dr /* static predict not taken */ done_store_dr: @@ -210,7 +210,7 @@ done_tss: movq %rsi,PCPU(CURTHREAD) /* into next thread */ /* Test if debug registers should be restored. */ - testb $PCB_DBREGS,PCB_FLAGS(%r8) + testl $PCB_DBREGS,PCB_FLAGS(%r8) jnz load_dr /* static predict not taken */ done_load_dr: Modified: head/sys/amd64/amd64/exception.S ============================================================================== --- head/sys/amd64/amd64/exception.S Wed Dec 22 19:04:14 2010 (r216672) +++ head/sys/amd64/amd64/exception.S Wed Dec 22 19:57:03 2010 (r216673) @@ -170,7 +170,7 @@ alltraps: jz alltraps_testi /* already running with kernel GS.base */ swapgs movq PCPU(CURPCB),%rdi - andb $~PCB_FULL_IRET,PCB_FLAGS(%rdi) + andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) movw %fs,TF_FS(%rsp) movw %gs,TF_GS(%rsp) movw %es,TF_ES(%rsp) @@ -243,7 +243,7 @@ alltraps_noen: jz 1f /* already running with kernel GS.base */ swapgs movq PCPU(CURPCB),%rdi - andb $~PCB_FULL_IRET,PCB_FLAGS(%rdi) + andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) 1: movw %fs,TF_FS(%rsp) movw %gs,TF_GS(%rsp) movw %es,TF_ES(%rsp) @@ -294,7 +294,7 @@ IDTVEC(page) jz 1f /* already running with kernel GS.base */ swapgs movq PCPU(CURPCB),%rdi - andb $~PCB_FULL_IRET,PCB_FLAGS(%rdi) + andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) 1: movq %cr2,%rdi /* preserve %cr2 before .. */ movq %rdi,TF_ADDR(%rsp) /* enabling interrupts. */ movw %fs,TF_FS(%rsp) @@ -324,7 +324,7 @@ IDTVEC(prot) jz 2f /* already running with kernel GS.base */ 1: swapgs 2: movq PCPU(CURPCB),%rdi - orb $PCB_FULL_IRET,PCB_FLAGS(%rdi) /* always full iret from GPF */ + orl $PCB_FULL_IRET,PCB_FLAGS(%rdi) /* always full iret from GPF */ movw %fs,TF_FS(%rsp) movw %gs,TF_GS(%rsp) movw %es,TF_ES(%rsp) @@ -356,7 +356,7 @@ IDTVEC(fast_syscall) movw %es,TF_ES(%rsp) movw %ds,TF_DS(%rsp) movq PCPU(CURPCB),%r11 - andb $~PCB_FULL_IRET,PCB_FLAGS(%r11) + andl $~PCB_FULL_IRET,PCB_FLAGS(%r11) sti movq $KUDSEL,TF_SS(%rsp) movq $KUCSEL,TF_CS(%rsp) @@ -661,7 +661,7 @@ doreti_exit: */ testb $SEL_RPL_MASK,TF_CS(%rsp) jz ld_regs - testb $PCB_FULL_IRET,PCB_FLAGS(%r8) + testl $PCB_FULL_IRET,PCB_FLAGS(%r8) jz ld_regs testl $TF_HASSEGS,TF_FLAGS(%rsp) je set_segs Modified: head/sys/amd64/include/pcb.h ============================================================================== --- head/sys/amd64/include/pcb.h Wed Dec 22 19:04:14 2010 (r216672) +++ head/sys/amd64/include/pcb.h Wed Dec 22 19:57:03 2010 (r216673) @@ -71,7 +71,7 @@ struct pcb { struct region_descriptor pcb_ldt; uint16_t pcb_tr; - u_char pcb_flags; + u_int pcb_flags; #define PCB_FULL_IRET 0x01 /* full iret is required */ #define PCB_DBREGS 0x02 /* process using debug registers */ #define PCB_KERNFPU 0x04 /* kernel uses fpu */ @@ -111,20 +111,20 @@ struct trapframe; * because traps and interrupts are executed only on instruction boundary. */ static __inline void -set_pcb_flags(struct pcb *pcb, const u_char flags) +set_pcb_flags(struct pcb *pcb, const u_int flags) { - __asm __volatile("orb %b1,%0" - : "=m" (pcb->pcb_flags) : "iq" (flags), "m" (pcb->pcb_flags) + __asm __volatile("orl %1,%0" + : "=m" (pcb->pcb_flags) : "ir" (flags), "m" (pcb->pcb_flags) : "cc"); } static __inline void -clear_pcb_flags(struct pcb *pcb, const u_char flags) +clear_pcb_flags(struct pcb *pcb, const u_int flags) { - __asm __volatile("andb %b1,%0" - : "=m" (pcb->pcb_flags) : "iq" (~flags), "m" (pcb->pcb_flags) + __asm __volatile("andl %1,%0" + : "=m" (pcb->pcb_flags) : "ir" (~flags), "m" (pcb->pcb_flags) : "cc"); }