public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] gcc-3.0.1 and 2.4.7-ac1
@ 2001-07-26 20:28 Petr Vandrovec
  2001-07-27  0:57 ` Richard Henderson
  2001-07-27 16:03 ` Florian Weimer
  0 siblings, 2 replies; 12+ messages in thread
From: Petr Vandrovec @ 2001-07-26 20:28 UTC (permalink / raw)
  To: Alan Cox; +Cc: linux-kernel

On 26 Jul 01 at 18:52, Alan Cox wrote:
> >   following is patch which was needed for compiling 2.4.7-ac1
> > on box equipped with 'gcc version 3.0.1 20010721 (Debian prerelease)'.
> > As I did not see such complaint yet - here it is.
> >   If you think that gcc is too lazy on inlining (I think so...),
> > tell me and I'll complain to gcc team instead of here.
> 
> Fix gcc. We use extern inline to say 'must be inlined' and that was the
> semantic it used to have. Some of our inlines will not work if the compiler
> uninlines them.

Just adding '-finline-limit=150' fixes all of them (critical limit
is somewhere between 120 and 150 on my kernel). As '-finline-limit'
is documented as being 10000 by default, it looks like that someone
changed default value to some really unreasonable value (probably 100).
                                        Best regards,
                                                Petr Vandrovec
                                                vandrove@vc.cvut.cz
                                                

^ permalink raw reply	[flat|nested] 12+ messages in thread
* Re: [PATCH] gcc-3.0.1 and 2.4.7-ac1
@ 2001-07-27 18:14 Petr Vandrovec
  0 siblings, 0 replies; 12+ messages in thread
From: Petr Vandrovec @ 2001-07-27 18:14 UTC (permalink / raw)
  To: Florian Weimer; +Cc: linux-kernel

On 27 Jul 01 at 18:03, Florian Weimer wrote:
> "Petr Vandrovec" <VANDROVE@vc.cvut.cz> writes:
> 
> > Just adding '-finline-limit=150' fixes all of them
> 
> This is not a fix, this is a workaround which is suitable for some
> specific GCC release(s).  The optimization decisions surrounding
> inlining are likely to change again, so this will break almost
> certainly in the future.

I found that main problem is in __constant_memcpy. This is very large
in internal representation (~70 'units'), so any kernel function which 
contains two memcpy calls with constant length cannot be inlined with 
current settings because of it contains 140+ internal operations - although
if compiler then generates static function (instead of inlined), it is ~10 
i386 operations long, from which 4 are push %edi/%esi and pop %esi/%edi...

                                            Best regards,
                                                    Petr Vandrovec
                                                    vandrove@vc.cvut.cz
                                                    

^ permalink raw reply	[flat|nested] 12+ messages in thread
* [PATCH] gcc-3.0.1 and 2.4.7-ac1
@ 2001-07-26 17:48 Petr Vandrovec
  2001-07-26 17:52 ` Alan Cox
  2001-07-26 17:55 ` Alan Cox
  0 siblings, 2 replies; 12+ messages in thread
From: Petr Vandrovec @ 2001-07-26 17:48 UTC (permalink / raw)
  To: alan; +Cc: linux-kernel

Hi Alan,
  following is patch which was needed for compiling 2.4.7-ac1
on box equipped with 'gcc version 3.0.1 20010721 (Debian prerelease)'.
As I did not see such complaint yet - here it is.

  Patch does NOT change all extern inline -> static inline, but only
changes extern -> static on functions which were not inlined and
due to which build failed (except one of get_pgd_slow, but I changed
both just for symmetry). There is high probability that other
sound drivers are affected too...

  If you think that gcc is too lazy on inlining (I think so...),
tell me and I'll complain to gcc team instead of here.
					Best regards,
						Petr Vandrovec
						vandrove@vc.cvut.cz


diff -urdN linux/drivers/sound/es1370.c linux/drivers/sound/es1370.c
--- linux/drivers/sound/es1370.c	Thu Jul 26 15:46:55 2001
+++ linux/drivers/sound/es1370.c	Thu Jul 26 16:53:41 2001
@@ -649,7 +649,7 @@
 	return diff;
 }
 
-extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
+static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
 {
 	if (bptr + len > bsize) {
 		unsigned x = bsize - bptr;
diff -urdN linux/drivers/sound/es1371.c linux/drivers/sound/es1371.c
--- linux/drivers/sound/es1371.c	Thu Jul 26 15:46:55 2001
+++ linux/drivers/sound/es1371.c	Thu Jul 26 16:53:31 2001
@@ -983,7 +983,7 @@
 	return diff;
 }
 
-extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
+static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
 {
 	if (bptr + len > bsize) {
 		unsigned x = bsize - bptr;
diff -urdN linux/drivers/sound/esssolo1.c linux/drivers/sound/esssolo1.c
--- linux/drivers/sound/esssolo1.c	Sun Jul 15 23:22:23 2001
+++ linux/drivers/sound/esssolo1.c	Thu Jul 26 16:54:13 2001
@@ -480,7 +480,7 @@
 	return 0;
 }
 
-extern inline int prog_dmabuf_adc(struct solo1_state *s)
+static inline int prog_dmabuf_adc(struct solo1_state *s)
 {
 	unsigned long va;
 	int c;
@@ -508,7 +508,7 @@
 	return 0;
 }
 
-extern inline int prog_dmabuf_dac(struct solo1_state *s)
+static inline int prog_dmabuf_dac(struct solo1_state *s)
 {
 	unsigned long va;
 	int c;
@@ -531,7 +531,7 @@
 	return 0;
 }
 
-extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
+static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
 {
 	if (bptr + len > bsize) {
 		unsigned x = bsize - bptr;
diff -urdN linux/include/asm-i386/pgalloc.h linux/include/asm-i386/pgalloc.h
--- linux/include/asm-i386/pgalloc.h	Thu Jul 26 15:46:58 2001
+++ linux/include/asm-i386/pgalloc.h	Thu Jul 26 16:33:44 2001
@@ -29,7 +29,7 @@
 
 extern void init_pae_pgd_cache(void);
 
-extern __inline__ pgd_t *get_pgd_slow(void)
+static __inline__ pgd_t *get_pgd_slow(void)
 {
 	int i;
 	pgd_t *pgd = kmem_cache_alloc(pae_pgd_cachep, GFP_KERNEL);
@@ -54,7 +54,7 @@
 
 #else
 
-extern __inline__ pgd_t *get_pgd_slow(void)
+static __inline__ pgd_t *get_pgd_slow(void)
 {
 	pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
 
diff -urdN linux/include/asm-i386/siginfo.h linux/include/asm-i386/siginfo.h
--- linux/include/asm-i386/siginfo.h	Fri Jul 20 19:52:18 2001
+++ linux/include/asm-i386/siginfo.h	Thu Jul 26 16:33:01 2001
@@ -216,7 +216,7 @@
 #ifdef __KERNEL__
 #include <linux/string.h>
 
-extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
+static inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
 {
 	if (from->si_code < 0)
 		memcpy(to, from, sizeof(siginfo_t));
diff -urdN linux/net/core/rtnetlink.c linux/net/core/rtnetlink.c
--- linux/net/core/rtnetlink.c	Mon Feb 28 02:45:10 2000
+++ linux/net/core/rtnetlink.c	Thu Jul 26 16:27:03 2001
@@ -274,7 +274,7 @@
 
 /* Process one rtnetlink message. */
 
-extern __inline__ int
+static __inline__ int
 rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, int *errp)
 {
 	struct rtnetlink_link *link;

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2001-07-27 16:14 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-07-26 20:28 [PATCH] gcc-3.0.1 and 2.4.7-ac1 Petr Vandrovec
2001-07-27  0:57 ` Richard Henderson
2001-07-27  3:12   ` Linus Torvalds
2001-07-27  6:44     ` Wayne Whitney
2001-07-27 16:03 ` Florian Weimer
  -- strict thread matches above, loose matches on Subject: below --
2001-07-27 18:14 Petr Vandrovec
2001-07-26 17:48 Petr Vandrovec
2001-07-26 17:52 ` Alan Cox
2001-07-26 20:12   ` Linus Torvalds
2001-07-27  6:55     ` Niels Kristian Bech Jensen
2001-07-27  8:34       ` Robert Schiele
2001-07-26 17:55 ` Alan Cox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox