| To: | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Subject: | Re: [PATCH] MIPS: Make BUG() __noreturn. |
| From: | Ingo Molnar <mingo@elte.hu> |
| Date: | Sun, 23 Nov 2008 10:58:18 +0100 |
| Cc: | David Daney <ddaney@caviumnetworks.com>, linux-mips@linux-mips.org, linux-kernel@vger.kernel.org |
| In-reply-to: | <20081121150023.032f7b5b.akpm@linux-foundation.org> |
| Original-recipient: | rfc822;linux-mips@linux-mips.org |
| References: | <49260E4C.8080500@caviumnetworks.com> <20081121150023.032f7b5b.akpm@linux-foundation.org> |
| Sender: | linux-mips-bounce@linux-mips.org |
| User-agent: | Mutt/1.5.18 (2008-05-17) |
* Andrew Morton <akpm@linux-foundation.org> wrote:
> > +static inline void __noreturn BUG(void)
> > +{
> > + __asm__ __volatile__("break %0" : : "i" (BRK_BUG));
> > + /* Fool GCC into thinking the function doesn't return. */
> > + while (1)
> > + ;
> > +}
>
> This kind of sucks, doesn't it? It adds instructions into the
> kernel text, very frequently on fast paths. Those instructions are
> never executed, and we're blowing away i-cache just to quash
> compiler warnings.
>
> For example, this:
>
> --- a/arch/x86/include/asm/bug.h~a
> +++ a/arch/x86/include/asm/bug.h
> @@ -22,14 +22,12 @@ do {
> \
> ".popsection" \
> : : "i" (__FILE__), "i" (__LINE__), \
> "i" (sizeof(struct bug_entry))); \
> - for (;;) ; \
> } while (0)
>
> #else
> #define BUG() \
> do { \
> asm volatile("ud2"); \
> - for (;;) ; \
> } while (0)
> #endif
>
> _
>
> reduces the size of i386 mm/vmalloc.o text by 56 bytes.
yes - the total image effect is significantly - recently looked at how
much larger !CONFIG_BUG builds would get if we inserted an infinite
loop into them - it was in the 50K text range (!).
but in the x86 ud2 case we could guarantee that we wont ever return
from that exception. Mind sending a patch with a signoff, a
description and an infinite loop in the u2d handler?
Ingo
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: [PATCH]: R10000 Needs LL/SC Workaround in Glibc, Kumba |
|---|---|
| Next by Date: | Re: [PATCH] ide: New libata driver for OCTEON SOC Compact Flash interface., Sergei Shtylyov |
| Previous by Thread: | Re: [PATCH] MIPS: Make BUG() __noreturn., David Daney |
| Next by Thread: | Re: [PATCH] MIPS: Make BUG() __noreturn., Ralf Baechle |
| Indexes: | [Date] [Thread] [Top] [All Lists] |