From: Benjamin LaHaise <bcrl@redhat.com>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] 4KB stack + irq stack for x86
Date: Wed, 5 Jun 2002 17:07:09 -0400 [thread overview]
Message-ID: <20020605170709.F4697@redhat.com> (raw)
In-Reply-To: <20020605144357.A4697@redhat.com> <Pine.LNX.4.33.0206051150320.10556-100000@penguin.transmeta.com>
On Wed, Jun 05, 2002 at 11:53:10AM -0700, Linus Torvalds wrote:
> All of the flags should be "sticky one-bits", so just oring them should do
> the right thing.
>
> That way we don't have to add nasty BUG checks to the code, and since
> we're already dirtying both cache-lines the extra overhead should
> literally be just the cost of doing one locked "orl".
This patch on top of the others should do that. I've placed a full
diff from 2.5.20 to the current code at
http://www.kvack.org/~blah/stack-v2.5.20-A2.diff .
-ben
--
"You will be reincarnated as a toad; and you will be much happier."
:r ~/patches/v2.5.20/v2.5.20-smallstack-A0-A1.diff
diff -urN stackcheck-v2.5.20-A1/arch/i386/kernel/entry.S stack-2.5.20.diff/arch/i386/kernel/entry.S
--- stackcheck-v2.5.20-A1/arch/i386/kernel/entry.S Wed Jun 5 15:59:12 2002
+++ stack-2.5.20.diff/arch/i386/kernel/entry.S Wed Jun 5 15:55:09 2002
@@ -365,26 +365,34 @@
movl TI_IRQ_STACK(%ebx),%ecx
movl TI_TASK(%ebx),%edx
movl %esp,%eax
- leal (THREAD_SIZE-4)(%ecx),%ebx
+ leal (THREAD_SIZE-4)(%ecx),%esi
testl %ecx,%ecx # is there a valid irq_stack?
# switch to the irq stack
#ifdef CONFIG_X86_HAVE_CMOV
- cmovnz %ebx,%esp
-#warning using cmov
+ cmovnz %esi,%esp
#else
-#warning cannot use cmov
jnz 1f
- mov %ebx,%esp
+ mov %esi,%esp
1:
#endif
# update the task pointer in the irq stack
- GET_THREAD_INFO(%ebx)
- movl %edx,TI_TASK(%ebx)
+ GET_THREAD_INFO(%esi)
+ movl %edx,TI_TASK(%esi)
call do_IRQ
+
movl %eax,%esp # potentially restore non-irq stack
+
+ # copy flags from the irq stack back into the task's thread_info
+ # %esi is saved over the do_IRQ call and contains the irq stack
+ # thread_info pointer
+ # %ebx contains the original thread_info pointer
+ movl TI_FLAGS(%esi),%eax
+ movl $0,TI_FLAGS(%esi)
+ LOCK orl %eax,TI_FLAGS(%ebx)
+
jmp ret_from_intr
#define BUILD_INTERRUPT(name, nr) \
diff -urN stackcheck-v2.5.20-A1/arch/i386/kernel/smpboot.c stack-2.5.20.diff/arch/i386/kernel/smpboot.c
--- stackcheck-v2.5.20-A1/arch/i386/kernel/smpboot.c Wed Jun 5 15:59:08 2002
+++ stack-2.5.20.diff/arch/i386/kernel/smpboot.c Wed Jun 5 15:12:36 2002
@@ -875,7 +875,13 @@
/* So we see what's up */
printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip);
- stack_start.esp = (void *) (THREAD_SIZE + (char *)idle->thread_info);
+
+ /* The -4 is to correct for the fact that the stack pointer
+ * is used to find the location of the thread_info structure
+ * by masking off several of the LSBs. Without the -4, esp
+ * is pointing to the page after the one the stack is on.
+ */
+ stack_start.esp = (void *)(THREAD_SIZE - 4 + (char *)idle->thread_info);
/*
* This grunge runs the startup process for
diff -urN stackcheck-v2.5.20-A1/include/asm-i386/thread_info.h stack-2.5.20.diff/include/asm-i386/thread_info.h
--- stackcheck-v2.5.20-A1/include/asm-i386/thread_info.h Wed Jun 5 15:59:08 2002
+++ stack-2.5.20.diff/include/asm-i386/thread_info.h Wed Jun 5 14:55:04 2002
@@ -57,6 +57,7 @@
* macros/functions for gaining access to the thread information structure
*/
#define THREAD_ORDER 0
+#define INIT_THREAD_SIZE THREAD_SIZE
#ifndef __ASSEMBLY__
#define init_thread_info (init_thread_union.thread_info)
next prev parent reply other threads:[~2002-06-05 21:07 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-06-05 2:55 [RFC] 4KB stack + irq stack for x86 Benjamin LaHaise
2002-06-05 15:33 ` Linus Torvalds
2002-06-05 18:43 ` Benjamin LaHaise
2002-06-05 18:53 ` Linus Torvalds
2002-06-05 21:07 ` Benjamin LaHaise [this message]
2002-06-05 22:15 ` Steve Lord
2002-06-05 22:31 ` Benjamin LaHaise
2002-06-05 23:13 ` David S. Miller
2002-06-06 0:24 ` Larry McVoy
2002-06-06 1:15 ` Andi Kleen
2002-06-02 15:52 ` Pavel Machek
2002-06-09 18:50 ` Andi Kleen
2002-06-06 1:42 ` Benjamin LaHaise
2002-06-06 2:30 ` Stephen Lord
[not found] <20020604225539.F9111@redhat.com.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.44.0206050820100.2941-100000@home.transmeta.com.suse.lists.linux.kernel>
[not found] ` <20020605144357.A4697@redhat.com.suse.lists.linux.kernel>
2002-06-05 20:40 ` Andi Kleen
2002-06-05 20:55 ` Linus Torvalds
-- strict thread matches above, loose matches on Subject: below --
2002-06-06 13:32 Ulrich Weigand
[not found] <mailman.1023370621.16639.linux-kernel2news@redhat.com>
2002-06-06 17:37 ` Pete Zaitcev
2002-06-07 1:06 ` David S. Miller
2002-06-06 19:24 Ulrich Weigand
[not found] <OF70FD985F.A9C66B00-ONC1256BD0.0069C993@de.ibm.com.suse.lists.linux.kernel>
2002-06-06 19:49 ` Andi Kleen
2002-06-06 20:27 ` David Mosberger
2002-06-07 11:28 ` Maciej W. Rozycki
2002-06-06 20:55 Ulrich Weigand
2002-06-06 21:19 ` David Mosberger
2002-06-06 22:10 ` Martin J. Bligh
2002-06-07 0:59 ` William Lee Irwin III
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20020605170709.F4697@redhat.com \
--to=bcrl@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.