2008-12-14 13:40:01

by Russell King

[permalink] [raw]
Subject: [RFC] remove linux/hardirq.h from asm-generic/local.h

While looking at reducing the amount of architecture namespace pollution
in the generic kernel, I found that asm/irq.h is included in the vast
majority of compilations on ARM (around 650 files.)

Since asm/irq.h includes a sub-architecture include file on ARM, this
causes a negative impact on the ccache's ability to re-use the build
results from other sub-architectures, so we have a desire to reduce
the dependencies on asm/irq.h.

It turns out that a major cause of this is the needless include of
linux/hardirq.h into asm-generic/local.h. The patch below removes this
include, resulting in some 250 to 300 files (around half) of the kernel
then omitting asm/irq.h.

My test builds still succeed, provided two ARM files are fixed
(arch/arm/kernel/traps.c and arch/arm/mm/fault.c) - so there may be
negative impacts for this on other architectures.

Note that x86 does not include asm/irq.h nor linux/hardirq.h in its
asm/local.h, so this patch can be viewed as bringing the generic version
into line with the x86 version.

Signed-off-by: Russell King <[email protected]>

diff --git a/include/asm-generic/local.h b/include/asm-generic/local.h
index 33d7d04..43c0b81 100644
--- a/include/asm-generic/local.h
+++ b/include/asm-generic/local.h
@@ -2,7 +2,6 @@
#define _ASM_GENERIC_LOCAL_H

#include <linux/percpu.h>
-#include <linux/hardirq.h>
#include <asm/atomic.h>
#include <asm/types.h>


--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of:


2008-12-14 17:59:03

by Andrew Morton

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

On Sun, 14 Dec 2008 13:39:41 +0000 Russell King <[email protected]> wrote:

> While looking at reducing the amount of architecture namespace pollution
> in the generic kernel, I found that asm/irq.h is included in the vast
> majority of compilations on ARM (around 650 files.)
>
> Since asm/irq.h includes a sub-architecture include file on ARM, this
> causes a negative impact on the ccache's ability to re-use the build
> results from other sub-architectures, so we have a desire to reduce
> the dependencies on asm/irq.h.
>
> It turns out that a major cause of this is the needless include of
> linux/hardirq.h into asm-generic/local.h. The patch below removes this
> include, resulting in some 250 to 300 files (around half) of the kernel
> then omitting asm/irq.h.
>
> My test builds still succeed, provided two ARM files are fixed
> (arch/arm/kernel/traps.c and arch/arm/mm/fault.c) - so there may be
> negative impacts for this on other architectures.
>
> Note that x86 does not include asm/irq.h nor linux/hardirq.h in its
> asm/local.h, so this patch can be viewed as bringing the generic version
> into line with the x86 version.

Sure. Includes are easy to add and hard to remove. I'll queue it up
and see if there's fallout.

btw,

> From: Russell King <[email protected]>
> Signed-off-by: Russell King <[email protected]>

that will result in the two rmk's getting separate akpm spam, different
Author from Signer-offer, etc. Adding an explicit From: line would
improve things.

2008-12-14 19:51:42

by Russell King

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

On Sun, Dec 14, 2008 at 09:58:03AM -0800, Andrew Morton wrote:
> On Sun, 14 Dec 2008 13:39:41 +0000 Russell King <[email protected]> wrote:
>
> > While looking at reducing the amount of architecture namespace pollution
> > in the generic kernel, I found that asm/irq.h is included in the vast
> > majority of compilations on ARM (around 650 files.)
> >
> > Since asm/irq.h includes a sub-architecture include file on ARM, this
> > causes a negative impact on the ccache's ability to re-use the build
> > results from other sub-architectures, so we have a desire to reduce
> > the dependencies on asm/irq.h.
> >
> > It turns out that a major cause of this is the needless include of
> > linux/hardirq.h into asm-generic/local.h. The patch below removes this
> > include, resulting in some 250 to 300 files (around half) of the kernel
> > then omitting asm/irq.h.
> >
> > My test builds still succeed, provided two ARM files are fixed
> > (arch/arm/kernel/traps.c and arch/arm/mm/fault.c) - so there may be
> > negative impacts for this on other architectures.
> >
> > Note that x86 does not include asm/irq.h nor linux/hardirq.h in its
> > asm/local.h, so this patch can be viewed as bringing the generic version
> > into line with the x86 version.
>
> Sure. Includes are easy to add and hard to remove. I'll queue it up
> and see if there's fallout.

Thanks, I've committed to my git tree the addition of linux/hardirq.h to
those two files I mentioned above. I guess at some point you'll pick
those up to prevent build errors on ARM?

> > From: Russell King <[email protected]>
> > Signed-off-by: Russell King <[email protected]>
>
> that will result in the two rmk's getting separate akpm spam, different
> Author from Signer-offer, etc. Adding an explicit From: line would
> improve things.

If they're sent as the same email, it doesn't matter.

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of:

2008-12-14 19:53:32

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

On Sun, 14 Dec 2008, Russell King wrote:
> While looking at reducing the amount of architecture namespace pollution
> in the generic kernel, I found that asm/irq.h is included in the vast
> majority of compilations on ARM (around 650 files.)
>
> Since asm/irq.h includes a sub-architecture include file on ARM, this
> causes a negative impact on the ccache's ability to re-use the build
> results from other sub-architectures, so we have a desire to reduce
> the dependencies on asm/irq.h.
>
> It turns out that a major cause of this is the needless include of
> linux/hardirq.h into asm-generic/local.h. The patch below removes this
> include, resulting in some 250 to 300 files (around half) of the kernel
> then omitting asm/irq.h.
>
> My test builds still succeed, provided two ARM files are fixed
> (arch/arm/kernel/traps.c and arch/arm/mm/fault.c) - so there may be
> negative impacts for this on other architectures.

I gave it a try on m68k/atari_defconfig, but no ill effects.

> Note that x86 does not include asm/irq.h nor linux/hardirq.h in its
> asm/local.h, so this patch can be viewed as bringing the generic version
> into line with the x86 version.
>
> Signed-off-by: Russell King <[email protected]>
>
> diff --git a/include/asm-generic/local.h b/include/asm-generic/local.h
> index 33d7d04..43c0b81 100644
> --- a/include/asm-generic/local.h
> +++ b/include/asm-generic/local.h
> @@ -2,7 +2,6 @@
> #define _ASM_GENERIC_LOCAL_H
>
> #include <linux/percpu.h>
> -#include <linux/hardirq.h>
> #include <asm/atomic.h>
> #include <asm/types.h>

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2008-12-16 18:42:40

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

On Sun, Dec 14, 2008 at 09:58:03AM -0800, Andrew Morton wrote:
> On Sun, 14 Dec 2008 13:39:41 +0000 Russell King <[email protected]> wrote:

> > Note that x86 does not include asm/irq.h nor linux/hardirq.h in its
> > asm/local.h, so this patch can be viewed as bringing the generic version
> > into line with the x86 version.
>
> Sure. Includes are easy to add and hard to remove. I'll queue it up
> and see if there's fallout.

Here is some (but not everything):

arch/avr32/kernel/traps.c:63: error: implicit declaration of function 'in_interrupt'
arch/avr32/kernel/traps.c:113: error: implicit declaration of function 'nmi_enter'
arch/avr32/kernel/traps.c:124: error: implicit declaration of function 'nmi_disable'
arch/avr32/kernel/traps.c:127: error: implicit declaration of function 'nmi_exit'
arch/sh/kernel/traps_32.c:104: error: implicit declaration of function 'in_interrupt'
arch/sparc64/kernel/sysfs.c:201: error: 'cpuinfo_sparc' undeclared (first use in this function)
arch/sparc64/kernel/mdesc.c:576: error: expected ')' before '*' token


diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c
index 0d98737..d547c8d 100644
--- a/arch/avr32/kernel/traps.c
+++ b/arch/avr32/kernel/traps.c
@@ -7,6 +7,7 @@
*/

#include <linux/bug.h>
+#include <linux/hardirq.h>
#include <linux/init.h>
#include <linux/kallsyms.h>
#include <linux/kdebug.h>
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index 1e5c74e..7a2dc95 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -13,6 +13,7 @@
*/
#include <linux/kernel.h>
#include <linux/ptrace.h>
+#include <linux/hardirq.h>
#include <linux/init.h>
#include <linux/spinlock.h>
#include <linux/module.h>
diff --git a/arch/sparc64/kernel/mdesc.c b/arch/sparc64/kernel/mdesc.c
index dde52bc..3c539a6 100644
--- a/arch/sparc64/kernel/mdesc.c
+++ b/arch/sparc64/kernel/mdesc.c
@@ -11,6 +11,7 @@
#include <linux/mm.h>
#include <linux/miscdevice.h>

+#include <asm/cpudata.h>
#include <asm/hypervisor.h>
#include <asm/mdesc.h>
#include <asm/prom.h>
diff --git a/arch/sparc64/kernel/sysfs.c b/arch/sparc64/kernel/sysfs.c
index 84e5ce1..d28f496 100644
--- a/arch/sparc64/kernel/sysfs.c
+++ b/arch/sparc64/kernel/sysfs.c
@@ -8,6 +8,7 @@
#include <linux/percpu.h>
#include <linux/init.h>

+#include <asm/cpudata.h>
#include <asm/hypervisor.h>
#include <asm/spitfire.h>

2008-12-17 01:42:41

by Stephen Rothwell

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

Hi Russell,

On Sun, 14 Dec 2008 19:51:16 +0000 Russell King <[email protected]> wrote:
>
> Thanks, I've committed to my git tree the addition of linux/hardirq.h to
> those two files I mentioned above. I guess at some point you'll pick
> those up to prevent build errors on ARM?

Andrew will (presumably) get these through linux-next (which he bases the
mm trees on).

--
Cheers,
Stephen Rothwell [email protected]
http://www.canb.auug.org.au/~sfr/


Attachments:
(No filename) (481.00 B)
(No filename) (197.00 B)
Download all attachments

2008-12-17 02:36:21

by Andrew Morton

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

On Tue, 16 Dec 2008 21:47:04 +0300 Alexey Dobriyan <[email protected]> wrote:

> On Sun, Dec 14, 2008 at 09:58:03AM -0800, Andrew Morton wrote:
> > On Sun, 14 Dec 2008 13:39:41 +0000 Russell King <[email protected]> wrote:
>
> > > Note that x86 does not include asm/irq.h nor linux/hardirq.h in its
> > > asm/local.h, so this patch can be viewed as bringing the generic version
> > > into line with the x86 version.
> >
> > Sure. Includes are easy to add and hard to remove. I'll queue it up
> > and see if there's fallout.
>
> Here is some (but not everything):
>
> arch/avr32/kernel/traps.c:63: error: implicit declaration of function 'in_interrupt'
> arch/avr32/kernel/traps.c:113: error: implicit declaration of function 'nmi_enter'
> arch/avr32/kernel/traps.c:124: error: implicit declaration of function 'nmi_disable'
> arch/avr32/kernel/traps.c:127: error: implicit declaration of function 'nmi_exit'
> arch/sh/kernel/traps_32.c:104: error: implicit declaration of function 'in_interrupt'
> arch/sparc64/kernel/sysfs.c:201: error: 'cpuinfo_sparc' undeclared (first use in this function)
> arch/sparc64/kernel/mdesc.c:576: error: expected ')' before '*' token
>
>
> diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c
> index 0d98737..d547c8d 100644
> --- a/arch/avr32/kernel/traps.c
> +++ b/arch/avr32/kernel/traps.c
> @@ -7,6 +7,7 @@
> */
>
> #include <linux/bug.h>
> +#include <linux/hardirq.h>
> #include <linux/init.h>
> #include <linux/kallsyms.h>
> #include <linux/kdebug.h>
> diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
> index 1e5c74e..7a2dc95 100644
> --- a/arch/sh/kernel/traps_32.c
> +++ b/arch/sh/kernel/traps_32.c
> @@ -13,6 +13,7 @@
> */
> #include <linux/kernel.h>
> #include <linux/ptrace.h>
> +#include <linux/hardirq.h>
> #include <linux/init.h>
> #include <linux/spinlock.h>
> #include <linux/module.h>
> diff --git a/arch/sparc64/kernel/mdesc.c b/arch/sparc64/kernel/mdesc.c
> index dde52bc..3c539a6 100644
> --- a/arch/sparc64/kernel/mdesc.c
> +++ b/arch/sparc64/kernel/mdesc.c
> @@ -11,6 +11,7 @@
> #include <linux/mm.h>
> #include <linux/miscdevice.h>
>
> +#include <asm/cpudata.h>
> #include <asm/hypervisor.h>
> #include <asm/mdesc.h>
> #include <asm/prom.h>
> diff --git a/arch/sparc64/kernel/sysfs.c b/arch/sparc64/kernel/sysfs.c
> index 84e5ce1..d28f496 100644
> --- a/arch/sparc64/kernel/sysfs.c
> +++ b/arch/sparc64/kernel/sysfs.c
> @@ -8,6 +8,7 @@
> #include <linux/percpu.h>
> #include <linux/init.h>
>
> +#include <asm/cpudata.h>
> #include <asm/hypervisor.h>
> #include <asm/spitfire.h>

hm, the two sparc64 files have just magically disappeared from linux-next.

Oh well, I'll do sparc and sparc64 crossbuilds soon.

2008-12-17 05:44:38

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [RFC] remove linux/hardirq.h from asm-generic/local.h

> > +++ b/arch/sparc64/kernel/mdesc.c
> > @@ -11,6 +11,7 @@
> > #include <linux/mm.h>
> > #include <linux/miscdevice.h>
> >
> > +#include <asm/cpudata.h>
> > #include <asm/hypervisor.h>
> > #include <asm/mdesc.h>
> > #include <asm/prom.h>
> > diff --git a/arch/sparc64/kernel/sysfs.c b/arch/sparc64/kernel/sysfs.c
> > index 84e5ce1..d28f496 100644
> > --- a/arch/sparc64/kernel/sysfs.c
> > +++ b/arch/sparc64/kernel/sysfs.c
> > @@ -8,6 +8,7 @@
> > #include <linux/percpu.h>
> > #include <linux/init.h>
> >
> > +#include <asm/cpudata.h>
> > #include <asm/hypervisor.h>
> > #include <asm/spitfire.h>
>
> hm, the two sparc64 files have just magically disappeared from linux-next.

s/magically/by hard work/ ;-)

We have unified sparc and sparc64 so all files lives in
arch/sparc/* these days.
Feed the sparc64 bits to davem and he will take care.
Or I can do it if you like.

Sam