* linux-next: tip tree build warning
@ 2009-10-28 7:14 Stephen Rothwell
2009-10-28 7:31 ` Ingo Molnar
0 siblings, 1 reply; 13+ messages in thread
From: Stephen Rothwell @ 2009-10-28 7:14 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Peter Zijlstra
Cc: linux-next, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1018 bytes --]
Hi all,
Today's linux-next build (x86_64 allmodconfig) produced this warning:
In file included from arch/x86/include/asm/smp.h:13,
from arch/x86/include/asm/mmzone_64.h:12,
from arch/x86/include/asm/mmzone.h:4,
from include/linux/mmzone.h:783,
from include/linux/gfp.h:4,
from include/linux/kmod.h:22,
from include/linux/module.h:13,
from arch/x86/kernel/apic/apic_noop.c:14:
arch/x86/include/asm/apic.h: In function 'default_apicid_to_cpu_present':
arch/x86/include/asm/apic.h:591: warning: the frame size of 8192 bytes is larger than 2048 bytes
It may not have been caused by the tip tree, but I can't find what
changed to cause this and a commit from the tip tree has exposed it
(9844ab11c763bfed9f054c82366b19dcda66aca9 "x86, apic: Introduce the NOOP
apic driver").
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: linux-next: tip tree build warning 2009-10-28 7:14 linux-next: tip tree build warning Stephen Rothwell @ 2009-10-28 7:31 ` Ingo Molnar 2009-10-28 7:41 ` Stephen Rothwell 0 siblings, 1 reply; 13+ messages in thread From: Ingo Molnar @ 2009-10-28 7:31 UTC (permalink / raw) To: Stephen Rothwell Cc: Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel * Stephen Rothwell <sfr@canb.auug.org.au> wrote: > Hi all, > > Today's linux-next build (x86_64 allmodconfig) produced this warning: > > In file included from arch/x86/include/asm/smp.h:13, > from arch/x86/include/asm/mmzone_64.h:12, > from arch/x86/include/asm/mmzone.h:4, > from include/linux/mmzone.h:783, > from include/linux/gfp.h:4, > from include/linux/kmod.h:22, > from include/linux/module.h:13, > from arch/x86/kernel/apic/apic_noop.c:14: > arch/x86/include/asm/apic.h: In function 'default_apicid_to_cpu_present': > arch/x86/include/asm/apic.h:591: warning: the frame size of 8192 bytes is larger than 2048 bytes > > It may not have been caused by the tip tree, but I can't find what > changed to cause this and a commit from the tip tree has exposed it > (9844ab11c763bfed9f054c82366b19dcda66aca9 "x86, apic: Introduce the > NOOP apic driver"). That commit is very simple. Are you sure it's not GCC bogosity? Ingo ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-10-28 7:31 ` Ingo Molnar @ 2009-10-28 7:41 ` Stephen Rothwell 2009-10-28 7:48 ` Stephen Rothwell 0 siblings, 1 reply; 13+ messages in thread From: Stephen Rothwell @ 2009-10-28 7:41 UTC (permalink / raw) To: Ingo Molnar Cc: Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel [-- Attachment #1: Type: text/plain, Size: 760 bytes --] Hi Ingo, On Wed, 28 Oct 2009 08:31:45 +0100 Ingo Molnar <mingo@elte.hu> wrote: > > > That commit is very simple. Are you sure it's not GCC bogosity? That commit just produces the warning (since it introduced the apic_noop.c file) and probably has nothing directly to do with the problem (as I said). The relevant part of apic.h is: static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) { return physid_mask_of_physid(phys_apicid); } Where physid_mask_of_physid() manipulates a physid_mask_t which contains an array of unsigned longs that is BITS_TO_LONGS(MAX_APICS) long and MAX_APICS is 32768. -- Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-10-28 7:41 ` Stephen Rothwell @ 2009-10-28 7:48 ` Stephen Rothwell 2009-10-28 7:50 ` Ingo Molnar 0 siblings, 1 reply; 13+ messages in thread From: Stephen Rothwell @ 2009-10-28 7:48 UTC (permalink / raw) To: Ingo Molnar Cc: Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel [-- Attachment #1: Type: text/plain, Size: 607 bytes --] Hi all, On Wed, 28 Oct 2009 18:41:26 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote: > > static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) > { > return physid_mask_of_physid(phys_apicid); > } I just noticed that this function (default_apicid_to_cpu_present) is declared "static inline in a header" but looks like it is only used by assigning its address to a function pointer. Its only use for x86_64 is in arch/x86/kernel/apic/apic_noop.c ... -- Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-10-28 7:48 ` Stephen Rothwell @ 2009-10-28 7:50 ` Ingo Molnar 2009-11-08 13:16 ` Cyrill Gorcunov 2009-11-08 21:30 ` linux-next: tip tree build warning Cyrill Gorcunov 0 siblings, 2 replies; 13+ messages in thread From: Ingo Molnar @ 2009-10-28 7:50 UTC (permalink / raw) To: Stephen Rothwell Cc: Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel * Stephen Rothwell <sfr@canb.auug.org.au> wrote: > Hi all, > > On Wed, 28 Oct 2009 18:41:26 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote: > > > > static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) > > { > > return physid_mask_of_physid(phys_apicid); > > } > > I just noticed that this function (default_apicid_to_cpu_present) is > declared "static inline in a header" but looks like it is only used by > assigning its address to a function pointer. Its only use for x86_64 > is in arch/x86/kernel/apic/apic_noop.c ... yes, that might be a real problem - returning the mask like that is messy. Thanks, will check. Ingo ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-10-28 7:50 ` Ingo Molnar @ 2009-11-08 13:16 ` Cyrill Gorcunov 2009-11-08 13:32 ` Ingo Molnar ` (2 more replies) 2009-11-08 21:30 ` linux-next: tip tree build warning Cyrill Gorcunov 1 sibling, 3 replies; 13+ messages in thread From: Cyrill Gorcunov @ 2009-11-08 13:16 UTC (permalink / raw) To: Ingo Molnar Cc: Stephen Rothwell, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel [Ingo Molnar - Wed, Oct 28, 2009 at 08:50:12AM +0100] | | * Stephen Rothwell <sfr@canb.auug.org.au> wrote: | | > Hi all, | > | > On Wed, 28 Oct 2009 18:41:26 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote: | > > | > > static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) | > > { | > > return physid_mask_of_physid(phys_apicid); | > > } | > | > I just noticed that this function (default_apicid_to_cpu_present) is | > declared "static inline in a header" but looks like it is only used by | > assigning its address to a function pointer. Its only use for x86_64 | > is in arch/x86/kernel/apic/apic_noop.c ... | | yes, that might be a real problem - returning the mask like that is | messy. Thanks, will check. | | Ingo | Darn, my fault sorry! Here is an update which fixes the issue. (Btw, Stephen could you CC me next time if you get commit id with me in authors, so I wouldn't miss problem). Please review, comments/complains are quite welcome! -- Cyrill --- x86,apic: Get rid of apicid_to_cpu_present assign on X86-64 In fact it's never get used on x86-64 (for 64 bit platform we use differ technique to enumerate io-units). Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> --- arch/x86/kernel/apic/apic_noop.c | 5 +++++ 1 file changed, 5 insertions(+) Index: linux-2.6.git/arch/x86/kernel/apic/apic_noop.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/apic_noop.c +++ linux-2.6.git/arch/x86/kernel/apic/apic_noop.c @@ -162,7 +162,12 @@ struct apic apic_noop = { .cpu_to_logical_apicid = noop_cpu_to_logical_apicid, .cpu_present_to_apicid = default_cpu_present_to_apicid, + +#ifdef CONFIG_X86_32 .apicid_to_cpu_present = default_apicid_to_cpu_present, +#else + .apicid_to_cpu_present = NULL, +#endif .setup_portio_remap = NULL, .check_phys_apicid_present = default_check_phys_apicid_present, ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-11-08 13:16 ` Cyrill Gorcunov @ 2009-11-08 13:32 ` Ingo Molnar 2009-11-08 13:43 ` Cyrill Gorcunov 2009-11-08 18:42 ` Cyrill Gorcunov 2009-11-08 23:39 ` Stephen Rothwell 2009-11-09 9:27 ` [tip:x86/apic] x86, apic: Get rid of apicid_to_cpu_present assign on 64-bit tip-bot for Cyrill Gorcunov 2 siblings, 2 replies; 13+ messages in thread From: Ingo Molnar @ 2009-11-08 13:32 UTC (permalink / raw) To: Cyrill Gorcunov Cc: Stephen Rothwell, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel * Cyrill Gorcunov <gorcunov@openvz.org> wrote: > [Ingo Molnar - Wed, Oct 28, 2009 at 08:50:12AM +0100] > | > | * Stephen Rothwell <sfr@canb.auug.org.au> wrote: > | > | > Hi all, > | > > | > On Wed, 28 Oct 2009 18:41:26 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote: > | > > > | > > static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) > | > > { > | > > return physid_mask_of_physid(phys_apicid); > | > > } > | > > | > I just noticed that this function (default_apicid_to_cpu_present) is > | > declared "static inline in a header" but looks like it is only used by > | > assigning its address to a function pointer. Its only use for x86_64 > | > is in arch/x86/kernel/apic/apic_noop.c ... > | > | yes, that might be a real problem - returning the mask like that is > | messy. Thanks, will check. > | > | Ingo > | > > Darn, my fault sorry! Here is an update which fixes the issue. > (Btw, Stephen could you CC me next time if you get commit id > with me in authors, so I wouldn't miss problem). > > Please review, comments/complains are quite welcome! > > -- Cyrill > --- > x86,apic: Get rid of apicid_to_cpu_present assign on X86-64 > > In fact it's never get used on x86-64 (for 64 bit platform > we use differ technique to enumerate io-units). > > Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> > --- > arch/x86/kernel/apic/apic_noop.c | 5 +++++ > 1 file changed, 5 insertions(+) > > Index: linux-2.6.git/arch/x86/kernel/apic/apic_noop.c > ===================================================================== > --- linux-2.6.git.orig/arch/x86/kernel/apic/apic_noop.c > +++ linux-2.6.git/arch/x86/kernel/apic/apic_noop.c > @@ -162,7 +162,12 @@ struct apic apic_noop = { > > .cpu_to_logical_apicid = noop_cpu_to_logical_apicid, > .cpu_present_to_apicid = default_cpu_present_to_apicid, > + > +#ifdef CONFIG_X86_32 > .apicid_to_cpu_present = default_apicid_to_cpu_present, > +#else > + .apicid_to_cpu_present = NULL, > +#endif would be better to unify this instead ... Ingo ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-11-08 13:32 ` Ingo Molnar @ 2009-11-08 13:43 ` Cyrill Gorcunov 2009-11-08 18:42 ` Cyrill Gorcunov 1 sibling, 0 replies; 13+ messages in thread From: Cyrill Gorcunov @ 2009-11-08 13:43 UTC (permalink / raw) To: Ingo Molnar Cc: Stephen Rothwell, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel [Ingo Molnar - Sun, Nov 08, 2009 at 02:32:47PM +0100] ... | | > + | > +#ifdef CONFIG_X86_32 | > .apicid_to_cpu_present = default_apicid_to_cpu_present, | > +#else | > + .apicid_to_cpu_present = NULL, | > +#endif | | would be better to unify this instead ... | | Ingo | OK, wait a bit. -- Cyrill ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-11-08 13:32 ` Ingo Molnar 2009-11-08 13:43 ` Cyrill Gorcunov @ 2009-11-08 18:42 ` Cyrill Gorcunov 1 sibling, 0 replies; 13+ messages in thread From: Cyrill Gorcunov @ 2009-11-08 18:42 UTC (permalink / raw) To: Ingo Molnar Cc: Stephen Rothwell, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel [Ingo Molnar - Sun, Nov 08, 2009 at 02:32:47PM +0100] | ... | > + | > +#ifdef CONFIG_X86_32 | > .apicid_to_cpu_present = default_apicid_to_cpu_present, | > +#else | > + .apicid_to_cpu_present = NULL, | > +#endif | | would be better to unify this instead ... | | Ingo | [not for inclusion] Here is what I'm going to implement (it is not finished yet, but just to show the idea -- ie to get rid of physid_mask_t passed as an argument at all but use pointers instead since callers already have bitmask allocated). And physid_set_mask_of_physid already do the work for us. Hmm? (Ingo, I think you may apply the former patch just to have the issue fixed this way temporary) -- Cyrill --- arch/x86/include/asm/apic.h | 7 +------ arch/x86/kernel/apic/apic_noop.c | 2 +- arch/x86/kernel/apic/bigsmp_32.c | 7 +------ arch/x86/kernel/apic/probe_32.c | 2 +- 4 files changed, 4 insertions(+), 14 deletions(-) Index: linux-2.6.git/arch/x86/include/asm/apic.h ===================================================================== --- linux-2.6.git.orig/arch/x86/include/asm/apic.h +++ linux-2.6.git/arch/x86/include/asm/apic.h @@ -310,7 +310,7 @@ struct apic { int (*apicid_to_node)(int logical_apicid); int (*cpu_to_logical_apicid)(int cpu); int (*cpu_present_to_apicid)(int mps_cpu); - physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); + void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *bitmap); void (*setup_portio_remap)(void); int (*check_phys_apicid_present)(int phys_apicid); void (*enable_apic_mode)(void); @@ -585,11 +585,6 @@ extern int default_cpu_present_to_apicid extern int default_check_phys_apicid_present(int phys_apicid); #endif -static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) -{ - return physid_mask_of_physid(phys_apicid); -} - #endif /* CONFIG_X86_LOCAL_APIC */ #ifdef CONFIG_X86_32 Index: linux-2.6.git/arch/x86/kernel/apic/apic_noop.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/apic_noop.c +++ linux-2.6.git/arch/x86/kernel/apic/apic_noop.c @@ -162,7 +162,7 @@ struct apic apic_noop = { .cpu_to_logical_apicid = noop_cpu_to_logical_apicid, .cpu_present_to_apicid = default_cpu_present_to_apicid, - .apicid_to_cpu_present = default_apicid_to_cpu_present, + .apicid_to_cpu_present = physid_set_mask_of_physid, .setup_portio_remap = NULL, .check_phys_apicid_present = default_check_phys_apicid_present, Index: linux-2.6.git/arch/x86/kernel/apic/bigsmp_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/bigsmp_32.c +++ linux-2.6.git/arch/x86/kernel/apic/bigsmp_32.c @@ -93,11 +93,6 @@ static int bigsmp_cpu_present_to_apicid( return BAD_APICID; } -static physid_mask_t bigsmp_apicid_to_cpu_present(int phys_apicid) -{ - return physid_mask_of_physid(phys_apicid); -} - /* Mapping from cpu number to logical apicid */ static inline int bigsmp_cpu_to_logical_apicid(int cpu) { @@ -230,7 +225,7 @@ struct apic apic_bigsmp = { .apicid_to_node = bigsmp_apicid_to_node, .cpu_to_logical_apicid = bigsmp_cpu_to_logical_apicid, .cpu_present_to_apicid = bigsmp_cpu_present_to_apicid, - .apicid_to_cpu_present = bigsmp_apicid_to_cpu_present, + .apicid_to_cpu_present = physid_set_mask_of_physid, .setup_portio_remap = NULL, .check_phys_apicid_present = bigsmp_check_phys_apicid_present, .enable_apic_mode = NULL, Index: linux-2.6.git/arch/x86/kernel/apic/probe_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/probe_32.c +++ linux-2.6.git/arch/x86/kernel/apic/probe_32.c @@ -108,7 +108,7 @@ struct apic apic_default = { .apicid_to_node = default_apicid_to_node, .cpu_to_logical_apicid = default_cpu_to_logical_apicid, .cpu_present_to_apicid = default_cpu_present_to_apicid, - .apicid_to_cpu_present = default_apicid_to_cpu_present, + .apicid_to_cpu_present = physid_set_mask_of_physid, .setup_portio_remap = NULL, .check_phys_apicid_present = default_check_phys_apicid_present, .enable_apic_mode = NULL, ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-11-08 13:16 ` Cyrill Gorcunov 2009-11-08 13:32 ` Ingo Molnar @ 2009-11-08 23:39 ` Stephen Rothwell 2009-11-09 9:27 ` [tip:x86/apic] x86, apic: Get rid of apicid_to_cpu_present assign on 64-bit tip-bot for Cyrill Gorcunov 2 siblings, 0 replies; 13+ messages in thread From: Stephen Rothwell @ 2009-11-08 23:39 UTC (permalink / raw) To: Cyrill Gorcunov Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel [-- Attachment #1: Type: text/plain, Size: 471 bytes --] Hi Cyril, On Sun, 8 Nov 2009 16:16:45 +0300 Cyrill Gorcunov <gorcunov@openvz.org> wrote: > > (Btw, Stephen could you CC me next time if you get commit id > with me in authors, so I wouldn't miss problem). Yeah, sorry about that - at the time I didn't know if this was caused directly by your commit or was just a side effect of some some other tree. -- Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* [tip:x86/apic] x86, apic: Get rid of apicid_to_cpu_present assign on 64-bit 2009-11-08 13:16 ` Cyrill Gorcunov 2009-11-08 13:32 ` Ingo Molnar 2009-11-08 23:39 ` Stephen Rothwell @ 2009-11-09 9:27 ` tip-bot for Cyrill Gorcunov 2 siblings, 0 replies; 13+ messages in thread From: tip-bot for Cyrill Gorcunov @ 2009-11-09 9:27 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, gorcunov, peterz, sfr, tglx, mingo Commit-ID: f4a70c55376683213229af7266dc57ad81aee354 Gitweb: http://git.kernel.org/tip/f4a70c55376683213229af7266dc57ad81aee354 Author: Cyrill Gorcunov <gorcunov@openvz.org> AuthorDate: Sun, 8 Nov 2009 16:16:45 +0300 Committer: Ingo Molnar <mingo@elte.hu> CommitDate: Sun, 8 Nov 2009 19:46:17 +0100 x86, apic: Get rid of apicid_to_cpu_present assign on 64-bit In fact it's never get used on x86-64 (for 64 bit platform we use differ technique to enumerate io-units). Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <20091108131645.GD5300@lenovo> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- arch/x86/kernel/apic/apic_noop.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/arch/x86/kernel/apic/apic_noop.c b/arch/x86/kernel/apic/apic_noop.c index 9ab6ffb..89629f6 100644 --- a/arch/x86/kernel/apic/apic_noop.c +++ b/arch/x86/kernel/apic/apic_noop.c @@ -162,7 +162,12 @@ struct apic apic_noop = { .cpu_to_logical_apicid = noop_cpu_to_logical_apicid, .cpu_present_to_apicid = default_cpu_present_to_apicid, + +#ifdef CONFIG_X86_32 .apicid_to_cpu_present = default_apicid_to_cpu_present, +#else + .apicid_to_cpu_present = NULL, +#endif .setup_portio_remap = NULL, .check_phys_apicid_present = default_check_phys_apicid_present, ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-10-28 7:50 ` Ingo Molnar 2009-11-08 13:16 ` Cyrill Gorcunov @ 2009-11-08 21:30 ` Cyrill Gorcunov 2009-11-09 8:10 ` Ingo Molnar 1 sibling, 1 reply; 13+ messages in thread From: Cyrill Gorcunov @ 2009-11-08 21:30 UTC (permalink / raw) To: Ingo Molnar Cc: Stephen Rothwell, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel, Maciej W. Rozycki, Yinghai Lu [Ingo Molnar - Wed, Oct 28, 2009 at 08:50:12AM +0100] | | * Stephen Rothwell <sfr@canb.auug.org.au> wrote: | | > Hi all, | > | > On Wed, 28 Oct 2009 18:41:26 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote: | > > | > > static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) | > > { | > > return physid_mask_of_physid(phys_apicid); | > > } | > | > I just noticed that this function (default_apicid_to_cpu_present) is | > declared "static inline in a header" but looks like it is only used by | > assigning its address to a function pointer. Its only use for x86_64 | > is in arch/x86/kernel/apic/apic_noop.c ... | | yes, that might be a real problem - returning the mask like that is | messy. Thanks, will check. | | Ingo | ok, here is what I've just cooked. Please review, I've CC'ed a few "knowing-apic-code-quite-well" persons just to be sure. Note that we still have a few items in "struct apic" which operate with physid_mask_t on stack. I think perhaps it's a good idea to touch this data via pointers povided by caller: physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map); I didn't manage to cover it today -- will do tomorrow if patch approach would be approved. Also, it's just warning (yet) since we don't use those routines in x86-64 so it doesn't harm. Anyway, please review, comment, complain and etc... would appreciate. -- Cyrill p.s.: i don't have inet access in office so will be able to reply at tomorrow evening only. --- x86,apic: Do not use stack'ed physid_mask_t in apicid_to_cpu_present Stephen Rothwell pointed out that apic-noop (when gets compiled in x86-84 environment) potentially may consume too much stack space. | | Hi all, | | Today's linux-next build (x86_64 allmodconfig) produced this warning: | | In file included from arch/x86/include/asm/smp.h:13, | from arch/x86/include/asm/mmzone_64.h:12, | from arch/x86/include/asm/mmzone.h:4, | from include/linux/mmzone.h:783, | from include/linux/gfp.h:4, | from include/linux/kmod.h:22, | from include/linux/module.h:13, | from arch/x86/kernel/apic/apic_noop.c:14: | arch/x86/include/asm/apic.h: In function 'default_apicid_to_cpu_present': | arch/x86/include/asm/apic.h:591: warning: the frame size of 8192 bytes is larger than 2048 bytes | | It may not have been caused by the tip tree, but I can't find what | changed to cause this and a commit from the tip tree has exposed it | (9844ab11c763bfed9f054c82366b19dcda66aca9 "x86, apic: Introduce the NOOP | apic driver"). | So I would say this is a bug in apic-noop (in fact we don't use default_apicid_to_cpu_present if operate in 64bit mode but it's a sign that something is wrong with code design). The key problem is that physid_mask_t is an array with a size depending on MAX_APICS, which in turn is big enough on x86-64 to trigger compiler warning. So to prevent such a situation in future we should use physid_mask_t pointer leaving apic driver with a task to operate over data but not allocate it. Caller should instead. This allow us throw out some code as well since physid_set_mask_of_physid already implement the functionality we need. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> --- arch/x86/include/asm/apic.h | 7 +------ arch/x86/kernel/apic/apic_noop.c | 2 +- arch/x86/kernel/apic/bigsmp_32.c | 7 +------ arch/x86/kernel/apic/es7000_32.c | 8 ++------ arch/x86/kernel/apic/io_apic.c | 4 ++-- arch/x86/kernel/apic/numaq_32.c | 4 ++-- arch/x86/kernel/apic/probe_32.c | 2 +- arch/x86/kernel/apic/summit_32.c | 4 ++-- arch/x86/kernel/visws_quirks.c | 2 +- 9 files changed, 13 insertions(+), 27 deletions(-) Index: linux-2.6.git/arch/x86/include/asm/apic.h ===================================================================== --- linux-2.6.git.orig/arch/x86/include/asm/apic.h +++ linux-2.6.git/arch/x86/include/asm/apic.h @@ -310,7 +310,7 @@ struct apic { int (*apicid_to_node)(int logical_apicid); int (*cpu_to_logical_apicid)(int cpu); int (*cpu_present_to_apicid)(int mps_cpu); - physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); + void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *map); void (*setup_portio_remap)(void); int (*check_phys_apicid_present)(int phys_apicid); void (*enable_apic_mode)(void); @@ -585,11 +585,6 @@ extern int default_cpu_present_to_apicid extern int default_check_phys_apicid_present(int phys_apicid); #endif -static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid) -{ - return physid_mask_of_physid(phys_apicid); -} - #endif /* CONFIG_X86_LOCAL_APIC */ #ifdef CONFIG_X86_32 Index: linux-2.6.git/arch/x86/kernel/apic/apic_noop.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/apic_noop.c +++ linux-2.6.git/arch/x86/kernel/apic/apic_noop.c @@ -162,7 +162,7 @@ struct apic apic_noop = { .cpu_to_logical_apicid = noop_cpu_to_logical_apicid, .cpu_present_to_apicid = default_cpu_present_to_apicid, - .apicid_to_cpu_present = default_apicid_to_cpu_present, + .apicid_to_cpu_present = physid_set_mask_of_physid, .setup_portio_remap = NULL, .check_phys_apicid_present = default_check_phys_apicid_present, Index: linux-2.6.git/arch/x86/kernel/apic/bigsmp_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/bigsmp_32.c +++ linux-2.6.git/arch/x86/kernel/apic/bigsmp_32.c @@ -93,11 +93,6 @@ static int bigsmp_cpu_present_to_apicid( return BAD_APICID; } -static physid_mask_t bigsmp_apicid_to_cpu_present(int phys_apicid) -{ - return physid_mask_of_physid(phys_apicid); -} - /* Mapping from cpu number to logical apicid */ static inline int bigsmp_cpu_to_logical_apicid(int cpu) { @@ -230,7 +225,7 @@ struct apic apic_bigsmp = { .apicid_to_node = bigsmp_apicid_to_node, .cpu_to_logical_apicid = bigsmp_cpu_to_logical_apicid, .cpu_present_to_apicid = bigsmp_cpu_present_to_apicid, - .apicid_to_cpu_present = bigsmp_apicid_to_cpu_present, + .apicid_to_cpu_present = physid_set_mask_of_physid, .setup_portio_remap = NULL, .check_phys_apicid_present = bigsmp_check_phys_apicid_present, .enable_apic_mode = NULL, Index: linux-2.6.git/arch/x86/kernel/apic/es7000_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/es7000_32.c +++ linux-2.6.git/arch/x86/kernel/apic/es7000_32.c @@ -539,14 +539,10 @@ static int es7000_cpu_present_to_apicid( static int cpu_id; -static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid) +static void es7000_apicid_to_cpu_present(int phys_apicid, physid_mask_t *map) { - physid_mask_t mask; - - mask = physid_mask_of_physid(cpu_id); + physid_set_mask_of_physid(cpu_id, map); ++cpu_id; - - return mask; } /* Mapping from cpu number to logical apicid */ Index: linux-2.6.git/arch/x86/kernel/apic/io_apic.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/io_apic.c +++ linux-2.6.git/arch/x86/kernel/apic/io_apic.c @@ -2073,7 +2073,7 @@ void __init setup_ioapic_ids_from_mpc(vo mp_ioapics[apic_id].apicid = i; } else { physid_mask_t tmp; - tmp = apic->apicid_to_cpu_present(mp_ioapics[apic_id].apicid); + apic->apicid_to_cpu_present(mp_ioapics[apic_id].apicid, &tmp); apic_printk(APIC_VERBOSE, "Setting %d in the " "phys_id_present_map\n", mp_ioapics[apic_id].apicid); @@ -3969,7 +3969,7 @@ int __init io_apic_get_unique_id(int ioa apic_id = i; } - tmp = apic->apicid_to_cpu_present(apic_id); + apic->apicid_to_cpu_present(apic_id, &tmp); physids_or(apic_id_map, apic_id_map, tmp); if (reg_00.bits.ID != apic_id) { Index: linux-2.6.git/arch/x86/kernel/apic/numaq_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/numaq_32.c +++ linux-2.6.git/arch/x86/kernel/apic/numaq_32.c @@ -402,12 +402,12 @@ static inline int numaq_apicid_to_node(i return logical_apicid >> 4; } -static inline physid_mask_t numaq_apicid_to_cpu_present(int logical_apicid) +static void numaq_apicid_to_cpu_present(int logical_apicid, physid_mask_t *map) { int node = numaq_apicid_to_node(logical_apicid); int cpu = __ffs(logical_apicid & 0xf); - return physid_mask_of_physid(cpu + 4*node); + physid_set_mask_of_physid(cpu + 4*node, map); } /* Where the IO area was mapped on multiquad, always 0 otherwise */ Index: linux-2.6.git/arch/x86/kernel/apic/probe_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/probe_32.c +++ linux-2.6.git/arch/x86/kernel/apic/probe_32.c @@ -108,7 +108,7 @@ struct apic apic_default = { .apicid_to_node = default_apicid_to_node, .cpu_to_logical_apicid = default_cpu_to_logical_apicid, .cpu_present_to_apicid = default_cpu_present_to_apicid, - .apicid_to_cpu_present = default_apicid_to_cpu_present, + .apicid_to_cpu_present = physid_set_mask_of_physid, .setup_portio_remap = NULL, .check_phys_apicid_present = default_check_phys_apicid_present, .enable_apic_mode = NULL, Index: linux-2.6.git/arch/x86/kernel/apic/summit_32.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/apic/summit_32.c +++ linux-2.6.git/arch/x86/kernel/apic/summit_32.c @@ -267,9 +267,9 @@ static physid_mask_t summit_ioapic_phys_ return physids_promote(0x0F); } -static physid_mask_t summit_apicid_to_cpu_present(int apicid) +static void summit_apicid_to_cpu_present(int apicid, physid_mask_t *map) { - return physid_mask_of_physid(0); + physid_set_mask_of_physid(0, map); } static int summit_check_phys_apicid_present(int physical_apicid) Index: linux-2.6.git/arch/x86/kernel/visws_quirks.c ===================================================================== --- linux-2.6.git.orig/arch/x86/kernel/visws_quirks.c +++ linux-2.6.git/arch/x86/kernel/visws_quirks.c @@ -183,7 +183,7 @@ static void __init MP_processor_info(str return; } - apic_cpus = apic->apicid_to_cpu_present(m->apicid); + apic->apicid_to_cpu_present(m->apicid, &apic_cpus); physids_or(phys_cpu_present_map, phys_cpu_present_map, apic_cpus); /* * Validate version ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: linux-next: tip tree build warning 2009-11-08 21:30 ` linux-next: tip tree build warning Cyrill Gorcunov @ 2009-11-09 8:10 ` Ingo Molnar 0 siblings, 0 replies; 13+ messages in thread From: Ingo Molnar @ 2009-11-09 8:10 UTC (permalink / raw) To: Cyrill Gorcunov Cc: Stephen Rothwell, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux-next, linux-kernel, Maciej W. Rozycki, Yinghai Lu * Cyrill Gorcunov <gorcunov@gmail.com> wrote: > +++ linux-2.6.git/arch/x86/include/asm/apic.h > @@ -310,7 +310,7 @@ struct apic { > int (*apicid_to_node)(int logical_apicid); > int (*cpu_to_logical_apicid)(int cpu); > int (*cpu_present_to_apicid)(int mps_cpu); > - physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); > + void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *map); Yep, passing masks by reference is unconditonal goodness - that's the cleanup we want. Mind sending a delta patch against tip:master? Ingo ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2009-11-09 9:28 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2009-10-28 7:14 linux-next: tip tree build warning Stephen Rothwell 2009-10-28 7:31 ` Ingo Molnar 2009-10-28 7:41 ` Stephen Rothwell 2009-10-28 7:48 ` Stephen Rothwell 2009-10-28 7:50 ` Ingo Molnar 2009-11-08 13:16 ` Cyrill Gorcunov 2009-11-08 13:32 ` Ingo Molnar 2009-11-08 13:43 ` Cyrill Gorcunov 2009-11-08 18:42 ` Cyrill Gorcunov 2009-11-08 23:39 ` Stephen Rothwell 2009-11-09 9:27 ` [tip:x86/apic] x86, apic: Get rid of apicid_to_cpu_present assign on 64-bit tip-bot for Cyrill Gorcunov 2009-11-08 21:30 ` linux-next: tip tree build warning Cyrill Gorcunov 2009-11-09 8:10 ` Ingo Molnar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®