diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2002-11-13 18:21:21 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-11-13 18:21:21 -0800 |
| commit | 2c0889e4eb92f6161392569de6172493cbb3899c (patch) | |
| tree | f5f89bb34b161d2132b2cdb864667dd1c4a973bf | |
| parent | 0d322099edee35a90e7484d9d43723bf22ea0da4 (diff) | |
| parent | 2ad57b06ac2caf5bdd322f31a0afd3864d174925 (diff) | |
Merge master.kernel.org:/home/davem/BK/net-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
| -rw-r--r-- | arch/i386/kernel/entry.S | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index fba0dc7abd48..b0c2e80f59f1 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S @@ -66,7 +66,9 @@ OLDESP = 0x34 OLDSS = 0x38 CF_MASK = 0x00000001 +TF_MASK = 0x00000100 IF_MASK = 0x00000200 +DF_MASK = 0x00000400 NT_MASK = 0x00004000 VM_MASK = 0x00020000 @@ -134,6 +136,17 @@ ENTRY(lcall7) movl %eax,EFLAGS(%esp) # movl %edx,EIP(%esp) # Now we move them to their "normal" places movl %ecx,CS(%esp) # + + # + # Call gates don't clear TF and NT in eflags like + # traps do, so we need to do it ourselves. + # %eax already contains eflags (but it may have + # DF set, clear that also) + # + andl $~(DF_MASK | TF_MASK | NT_MASK),%eax + pushl %eax + popfl + movl %esp, %ebx pushl %ebx andl $-8192, %ebx # GET_THREAD_INFO @@ -156,6 +169,17 @@ ENTRY(lcall27) movl %eax,EFLAGS(%esp) # movl %edx,EIP(%esp) # Now we move them to their "normal" places movl %ecx,CS(%esp) # + + # + # Call gates don't clear TF and NT in eflags like + # traps do, so we need to do it ourselves. + # %eax already contains eflags (but it may have + # DF set, clear that also) + # + andl $~(DF_MASK | TF_MASK | NT_MASK),%eax + pushl %eax + popfl + movl %esp, %ebx pushl %ebx andl $-8192, %ebx # GET_THREAD_INFO |
