* [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
@ 2008-04-13 15:41 Jacek Luczak
2008-04-14 7:26 ` Ingo Molnar
0 siblings, 1 reply; 10+ messages in thread
From: Jacek Luczak @ 2008-04-13 15:41 UTC (permalink / raw)
To: Ingo Molnar, LKML, Sam Ravnborg
This patch adds extern to native_pagetable_setup_[start,done]() protypes and
fixes following section mismatch warning:
WARNING: arch/x86/mm/built-in.o(.text+0xf2): Section mismatch in reference from
the function paravirt_pagetable_setup_start()
paravirt_pagetable_setup_[start,done]() is used by __init pagetable_init().
Annotate both functions with __init.
Signed-off-by: Jacek Luczak <luczak.jacek@gmail.com>
---
pgtable_32.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h
index 6cbc520..248cfea 100644
--- a/include/asm-x86/pgtable_32.h
+++ b/include/asm-x86/pgtable_32.h
@@ -204,16 +204,16 @@ do { \
*/
#define update_mmu_cache(vma, address, pte) do { } while (0)
-void native_pagetable_setup_start(pgd_t *base);
-void native_pagetable_setup_done(pgd_t *base);
+extern void native_pagetable_setup_start(pgd_t *base);
+extern void native_pagetable_setup_done(pgd_t *base);
#ifndef CONFIG_PARAVIRT
-static inline void paravirt_pagetable_setup_start(pgd_t *base)
+static inline void __init paravirt_pagetable_setup_start(pgd_t *base)
{
native_pagetable_setup_start(base);
}
-static inline void paravirt_pagetable_setup_done(pgd_t *base)
+static inline void __init paravirt_pagetable_setup_done(pgd_t *base)
{
native_pagetable_setup_done(base);
}
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-13 15:41 [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes Jacek Luczak
@ 2008-04-14 7:26 ` Ingo Molnar
2008-04-14 8:41 ` Sam Ravnborg
0 siblings, 1 reply; 10+ messages in thread
From: Ingo Molnar @ 2008-04-14 7:26 UTC (permalink / raw)
To: Jacek Luczak; +Cc: LKML, Sam Ravnborg
* Jacek Luczak <difrost.kernel@gmail.com> wrote:
> paravirt_pagetable_setup_[start,done]() is used by __init
> pagetable_init(). Annotate both functions with __init.
> #ifndef CONFIG_PARAVIRT
> -static inline void paravirt_pagetable_setup_start(pgd_t *base)
> +static inline void __init paravirt_pagetable_setup_start(pgd_t *base)
> {
> native_pagetable_setup_start(base);
> }
hm, that's an interesting case: we need those annotations probably
because gcc decided to not inline those functions. (this is possible via
the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take on
that?
Ingo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 7:26 ` Ingo Molnar
@ 2008-04-14 8:41 ` Sam Ravnborg
2008-04-14 8:53 ` Ingo Molnar
0 siblings, 1 reply; 10+ messages in thread
From: Sam Ravnborg @ 2008-04-14 8:41 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Jacek Luczak, LKML
On Mon, Apr 14, 2008 at 09:26:45AM +0200, Ingo Molnar wrote:
>
> * Jacek Luczak <difrost.kernel@gmail.com> wrote:
>
> > paravirt_pagetable_setup_[start,done]() is used by __init
> > pagetable_init(). Annotate both functions with __init.
>
> > #ifndef CONFIG_PARAVIRT
> > -static inline void paravirt_pagetable_setup_start(pgd_t *base)
> > +static inline void __init paravirt_pagetable_setup_start(pgd_t *base)
> > {
> > native_pagetable_setup_start(base);
> > }
>
> hm, that's an interesting case: we need those annotations probably
> because gcc decided to not inline those functions. (this is possible via
> the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take on
> that?
gcc uses different heuristics for inlining between the different
versions. Therefore to achieve somehow predictable results I
added -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
is enabled.
So in the above case for any normal kernel build we would see that
gcc inlined the above and everything is fine.
But for the CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and
thus we see that we have a section mismatch.
The rationale was that it is better to annotate a few more functions and
reliable results across gcc versions than it is to see section
mismatch warnings only with older but not newer gcc versions.
Sam
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 8:41 ` Sam Ravnborg
@ 2008-04-14 8:53 ` Ingo Molnar
2008-04-14 8:59 ` Sam Ravnborg
2008-04-14 8:59 ` Jacek Luczak
0 siblings, 2 replies; 10+ messages in thread
From: Ingo Molnar @ 2008-04-14 8:53 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: Jacek Luczak, LKML
* Sam Ravnborg <sam@ravnborg.org> wrote:
> > hm, that's an interesting case: we need those annotations probably
> > because gcc decided to not inline those functions. (this is possible
> > via the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take
> > on that?
>
> gcc uses different heuristics for inlining between the different
> versions. Therefore to achieve somehow predictable results I added
> -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
> is enabled.
>
> So in the above case for any normal kernel build we would see that gcc
> inlined the above and everything is fine. But for the
> CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and thus we see
> that we have a section mismatch.
ah, ok. So i guess this will result in a few isolated cases of __init
annotations added to inline functions - Jacek fixed one such case - but
it should not result in the general spreading of __init annotations to
inline functions, correct? (which i was worried about)
Ingo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 8:53 ` Ingo Molnar
@ 2008-04-14 8:59 ` Sam Ravnborg
2008-04-14 9:11 ` Jacek Luczak
2008-04-14 8:59 ` Jacek Luczak
1 sibling, 1 reply; 10+ messages in thread
From: Sam Ravnborg @ 2008-04-14 8:59 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Jacek Luczak, LKML
On Mon, Apr 14, 2008 at 10:53:07AM +0200, Ingo Molnar wrote:
>
> * Sam Ravnborg <sam@ravnborg.org> wrote:
>
> > > hm, that's an interesting case: we need those annotations probably
> > > because gcc decided to not inline those functions. (this is possible
> > > via the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take
> > > on that?
> >
> > gcc uses different heuristics for inlining between the different
> > versions. Therefore to achieve somehow predictable results I added
> > -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
> > is enabled.
> >
> > So in the above case for any normal kernel build we would see that gcc
> > inlined the above and everything is fine. But for the
> > CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and thus we see
> > that we have a section mismatch.
>
> ah, ok. So i guess this will result in a few isolated cases of __init
> annotations added to inline functions - Jacek fixed one such case - but
> it should not result in the general spreading of __init annotations to
> inline functions, correct? (which i was worried about)
I do not think so. The need for small isolated inline functions
in the init paths are minimal and last I did a section mismatch free
sweep on the kernel it was only few if any inline functions(*) I had
to annotate.
(*) Considering only the minimal amount of function that ought
to be annotated inlined.
Sam
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 8:53 ` Ingo Molnar
2008-04-14 8:59 ` Sam Ravnborg
@ 2008-04-14 8:59 ` Jacek Luczak
1 sibling, 0 replies; 10+ messages in thread
From: Jacek Luczak @ 2008-04-14 8:59 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Sam Ravnborg, LKML
Ingo Molnar pisze:
> * Sam Ravnborg <sam@ravnborg.org> wrote:
>
>>> hm, that's an interesting case: we need those annotations probably
>>> because gcc decided to not inline those functions. (this is possible
>>> via the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take
>>> on that?
>> gcc uses different heuristics for inlining between the different
>> versions. Therefore to achieve somehow predictable results I added
>> -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
>> is enabled.
>>
>> So in the above case for any normal kernel build we would see that gcc
>> inlined the above and everything is fine. But for the
>> CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and thus we see
>> that we have a section mismatch.
>
> ah, ok. So i guess this will result in a few isolated cases of __init
> annotations added to inline functions - Jacek fixed one such case - but
> it should not result in the general spreading of __init annotations to
> inline functions, correct? (which i was worried about)
>
Yep, I was confused about that patch, thus I didn't sent it previously.
Hmm...I forgot that all my kernels where compiled with
CONFIG_OPTIMIZE_INLINING=y. There's no mismatch warning printed while
OPTIMIZE_INLINING is not set. Also I've made a fast look into objects and looks
like those two functions are really inlined. I will also take a look on those
functions with CONFIG_OPTIMIZE_INLINING=y && ONFIG_DEBUG_SECTION_MISMATCH=n.
-Jacek
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 8:59 ` Sam Ravnborg
@ 2008-04-14 9:11 ` Jacek Luczak
2008-04-14 9:52 ` Sam Ravnborg
0 siblings, 1 reply; 10+ messages in thread
From: Jacek Luczak @ 2008-04-14 9:11 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: Ingo Molnar, LKML
[-- Attachment #1: Type: text/plain, Size: 1926 bytes --]
Sam Ravnborg pisze:
> On Mon, Apr 14, 2008 at 10:53:07AM +0200, Ingo Molnar wrote:
>> * Sam Ravnborg <sam@ravnborg.org> wrote:
>>
>>>> hm, that's an interesting case: we need those annotations probably
>>>> because gcc decided to not inline those functions. (this is possible
>>>> via the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take
>>>> on that?
>>> gcc uses different heuristics for inlining between the different
>>> versions. Therefore to achieve somehow predictable results I added
>>> -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
>>> is enabled.
>>>
>>> So in the above case for any normal kernel build we would see that gcc
>>> inlined the above and everything is fine. But for the
>>> CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and thus we see
>>> that we have a section mismatch.
>> ah, ok. So i guess this will result in a few isolated cases of __init
>> annotations added to inline functions - Jacek fixed one such case - but
>> it should not result in the general spreading of __init annotations to
>> inline functions, correct? (which i was worried about)
> I do not think so. The need for small isolated inline functions
> in the init paths are minimal and last I did a section mismatch free
> sweep on the kernel it was only few if any inline functions(*) I had
> to annotate.
>
> (*) Considering only the minimal amount of function that ought
> to be annotated inlined.
There's a lot of inline __init functions already - which, on the other hand
should not result in more of such. Attached you can find grep on tree which
shows all inline __init functions (you won't find my paravirt_pagetable_setup_*
functions in output as I removed __init for test).
Sam, do -fno-inline-functions-called-once could affect
paravirt_pagetable_setup_done? In general there was no section mismatch warning
for this function, but I've annotated it also.
-Jacek
[-- Attachment #2: inline__init.log --]
[-- Type: text/plain, Size: 5890 bytes --]
1225:static inline int __init ace_of_register(void)
1237:static inline int __init ace_of_register(void) { return 0; }
./drivers/block/xsysace.c
809:static inline int __init hwicap_of_register(void)
821:static inline int __init hwicap_of_register(void) { return 0; }
./drivers/char/xilinx_hwicap/xilinx_hwicap.c
195:static inline int __init
./drivers/net/wan/sbni.c
776:static inline void __init fs_subset_descriptors(void)
876:static inline void __init hs_subset_descriptors(void)
./drivers/usb/gadget/ether.c
47:static inline void __init show_version (void) {
./drivers/atm/ambassador.c
57:static inline void __init show_version (void) {
./drivers/atm/horizon.c
66:static inline void __init set_phy_reg(struct ti_ohci *ohci, u8 addr, u8 data)
81:static inline void __init init_ohci1394_soft_reset(struct ti_ohci *ohci) {
95:static inline void __init init_ohci1394_initialize(struct ti_ohci *ohci)
167:static inline void __init init_ohci1394_wait_for_busresets(struct ti_ohci *ohci)
185:static inline void __init init_ohci1394_enable_physical_dma(struct ti_ohci *hci)
196:static inline void __init init_ohci1394_reset_and_init_dma(struct ti_ohci *ohci)
225:static inline void __init init_ohci1394_controller(int num, int slot, int func)
./drivers/ieee1394/init_ohci1394_dma.c
91:static inline int __init doccheck(void __iomem *potential, unsigned long physadr)
./drivers/mtd/devices/docprobe.c
1111:static inline int __init nftl_partscan(struct mtd_info *mtd, struct mtd_partition *parts)
1214:static inline int __init inftl_partscan(struct mtd_info *mtd, struct mtd_partition *parts)
1433:static inline int __init doc2000_init(struct mtd_info *mtd)
1450:static inline int __init doc2001_init(struct mtd_info *mtd)
1481:static inline int __init doc2001plus_init(struct mtd_info *mtd)
./drivers/mtd/nand/diskonchip.c
975:static inline int __init
./drivers/parisc/pdc_stable.c
19:static inline void __init pcmcia_setup_ioctl(void) { return; }
./drivers/pcmcia/ds_internal.h
616:static inline int __init ulite_of_register(void)
628:static inline int __init ulite_of_register(void) { return 0; }
./drivers/serial/uartlite.c
480:static inline int __init xilinxfb_of_register(void)
492:static inline int __init xilinxfb_of_register(void) { return 0; }
./drivers/video/xilinxfb.c
136:static inline void __init eat(unsigned n)
./init/initramfs.c
3290:static inline void __init set_pageblock_order(unsigned int order)
./mm/page_alloc.c
1086:static inline int __init
./net/irda/irnet/irnet_ppp.c
352:static inline int __init probe_pas(struct address_info *hw_config)
./sound/oss/pas2_card.c
257:static inline int __init probe_v_midi(struct address_info *hw_config)
./sound/oss/v_midi.c
2071:static inline void __init unlock_ExtINT_logic(void)
2129:static inline void __init check_timer(void)
./arch/x86/kernel/io_apic_32.c
493:static inline void __init construct_default_ISA_mptable(int mpc_default_type)
./arch/x86/kernel/mpparse.c
126:static inline int __init
146:static inline int __init
./arch/x86/kernel/e820_64.c
1602:static inline void __init unlock_ExtINT_logic(void)
1657:static inline void __init check_timer(void)
./arch/x86/kernel/io_apic_64.c
1259:static inline int __init determine_tce_table_size(u64 ram)
./arch/x86/kernel/pci-calgary_64.c
540:static inline void __init reserve_crashkernel(void)
./arch/x86/kernel/setup_32.c
259:static inline void __init reserve_crashkernel(void)
./arch/x86/kernel/setup_64.c
596:static inline int __init check_vmi_rom(struct vrom_header *rom)
663:static inline int __init probe_vmi_rom(void)
744:static inline int __init activate_vmi(void)
./arch/x86/kernel/vmi_32.c
478:static inline void __init early_set_fixmap(enum fixed_addresses idx,
487:static inline void __init early_clear_fixmap(enum fixed_addresses idx)
./arch/x86/mm/ioremap.c
84:static inline void __init
96:static inline void __init
./arch/alpha/kernel/smp.c
193:static inline int __init
223:static inline int __init
238:static inline void __init
245:static inline void __init
294:static inline int __init
311:static inline void __init
./arch/alpha/kernel/sys_cabriolet.c
57:static inline void __init
147:static inline int __init
186:static inline int __init
205:static inline void __init
214:static inline void __init
./arch/alpha/kernel/sys_sio.c
123:static inline void __init sdp2430_init_smc91x(void)
./arch/arm/mach-omap2/board-2430sdp.c
186:static inline void __init apollon_init_smc91x(void)
./arch/arm/mach-omap2/board-apollon.c
256:static inline void __init h4_init_debug(void)
./arch/arm/mach-omap2/board-h4.c
82:static inline void __init omap_serial_reset(struct plat_serial8250_port *p)
./arch/arm/mach-omap2/serial.c
254:static inline void __init setup_crashkernel(unsigned long total, int *n)
386:static inline int __init
./arch/ia64/kernel/setup.c
203:static inline int __init is_shub_1_1(int nasid)
696:static inline int __init board_needs_cnode(int type)
./arch/ia64/sn/kernel/setup.c
148:static inline int __init indy_sc_probe(void)
./arch/mips/mm/sc-ip22.c
55:static inline int __init mips_sc_probe(void)
./arch/mips/mm/sc-mips.c
80:static inline int __init r5k_sc_probe(void)
./arch/mips/mm/sc-r5k.c
270:static inline void __init
./arch/parisc/kernel/processor.c
171:static inline void __init sio_write(u8 val, u8 index)
./arch/powerpc/platforms/chrp/setup.c
60:static inline int __init
./arch/ppc/platforms/lopec.c
27:static inline int __init
./arch/ppc/platforms/pal4_pci.c
300:static inline int __init
./arch/ppc/platforms/powerpmc250.c
166:static inline void __init reserve_crashkernel(void)
./arch/sh/kernel/setup.c
46:static inline void __init smp_store_cpu_info(unsigned int cpu)
./arch/sh/kernel/smp.c
777:static inline void __init gdb_vbr_init(void)
./arch/sh/kernel/traps_32.c
16:static inline void __init check_bugs(void)
./include/asm-mn10300/bugs.h
36:static inline void __init smpboot_setup_io_apic(void)
./include/asm-x86/mach-default/smpboot_hooks.h
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 9:11 ` Jacek Luczak
@ 2008-04-14 9:52 ` Sam Ravnborg
2008-04-14 11:21 ` Jacek Luczak
0 siblings, 1 reply; 10+ messages in thread
From: Sam Ravnborg @ 2008-04-14 9:52 UTC (permalink / raw)
To: Jacek Luczak; +Cc: Ingo Molnar, LKML
On Mon, Apr 14, 2008 at 11:11:03AM +0200, Jacek Luczak wrote:
> Sam Ravnborg pisze:
> > On Mon, Apr 14, 2008 at 10:53:07AM +0200, Ingo Molnar wrote:
> >> * Sam Ravnborg <sam@ravnborg.org> wrote:
> >>
> >>>> hm, that's an interesting case: we need those annotations probably
> >>>> because gcc decided to not inline those functions. (this is possible
> >>>> via the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take
> >>>> on that?
> >>> gcc uses different heuristics for inlining between the different
> >>> versions. Therefore to achieve somehow predictable results I added
> >>> -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
> >>> is enabled.
> >>>
> >>> So in the above case for any normal kernel build we would see that gcc
> >>> inlined the above and everything is fine. But for the
> >>> CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and thus we see
> >>> that we have a section mismatch.
> >> ah, ok. So i guess this will result in a few isolated cases of __init
> >> annotations added to inline functions - Jacek fixed one such case - but
> >> it should not result in the general spreading of __init annotations to
> >> inline functions, correct? (which i was worried about)
> > I do not think so. The need for small isolated inline functions
> > in the init paths are minimal and last I did a section mismatch free
> > sweep on the kernel it was only few if any inline functions(*) I had
> > to annotate.
> >
> > (*) Considering only the minimal amount of function that ought
> > to be annotated inlined.
>
> There's a lot of inline __init functions already - which, on the other hand
> should not result in more of such. Attached you can find grep on tree which
> shows all inline __init functions (you won't find my paravirt_pagetable_setup_*
> functions in output as I removed __init for test).
Most of the functionas listed should never have been annotated inline.
If you filter aways the functions that are in one one of their
incarnations longer than 8 lines or are located in a .c file the list
is much shorter. This is the real candidates (the figure '8' is just bad way
to filter away 'complex' functions).
Your paravirt_pagetable_setup_done is a real one btw.
> Sam, do -fno-inline-functions-called-once could affect
> paravirt_pagetable_setup_done? In general there was no section mismatch warning
> for this function, but I've annotated it also.
Most liekly yes - but I did not check.
Sam
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 9:52 ` Sam Ravnborg
@ 2008-04-14 11:21 ` Jacek Luczak
2008-04-14 18:31 ` Sam Ravnborg
0 siblings, 1 reply; 10+ messages in thread
From: Jacek Luczak @ 2008-04-14 11:21 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: Ingo Molnar, LKML
Sam Ravnborg pisze:
> On Mon, Apr 14, 2008 at 11:11:03AM +0200, Jacek Luczak wrote:
>> Sam Ravnborg pisze:
>>> On Mon, Apr 14, 2008 at 10:53:07AM +0200, Ingo Molnar wrote:
>>>> * Sam Ravnborg <sam@ravnborg.org> wrote:
>>>>
>>>>>> hm, that's an interesting case: we need those annotations probably
>>>>>> because gcc decided to not inline those functions. (this is possible
>>>>>> via the new CONFIG_OPTIMIZE_INLINING=y option) Sam, what's your take
>>>>>> on that?
>>>>> gcc uses different heuristics for inlining between the different
>>>>> versions. Therefore to achieve somehow predictable results I added
>>>>> -fno-inline-functions-called-once when CONFIG_DEBUG_SECTION_MISMATCH
>>>>> is enabled.
>>>>>
>>>>> So in the above case for any normal kernel build we would see that gcc
>>>>> inlined the above and everything is fine. But for the
>>>>> CONFIG_DEBUG_SECTION_MISMTCH cases we do not inline and thus we see
>>>>> that we have a section mismatch.
>>>> ah, ok. So i guess this will result in a few isolated cases of __init
>>>> annotations added to inline functions - Jacek fixed one such case - but
>>>> it should not result in the general spreading of __init annotations to
>>>> inline functions, correct? (which i was worried about)
>>> I do not think so. The need for small isolated inline functions
>>> in the init paths are minimal and last I did a section mismatch free
>>> sweep on the kernel it was only few if any inline functions(*) I had
>>> to annotate.
>>>
>>> (*) Considering only the minimal amount of function that ought
>>> to be annotated inlined.
>> There's a lot of inline __init functions already - which, on the other hand
>> should not result in more of such. Attached you can find grep on tree which
>> shows all inline __init functions (you won't find my paravirt_pagetable_setup_*
>> functions in output as I removed __init for test).
>
> Most of the functionas listed should never have been annotated inline.
> If you filter aways the functions that are in one one of their
> incarnations longer than 8 lines or are located in a .c file the list
> is much shorter. This is the real candidates (the figure '8' is just bad way
> to filter away 'complex' functions).
> Your paravirt_pagetable_setup_done is a real one btw.
It's worth of closer investigation I think.
>> Sam, do -fno-inline-functions-called-once could affect
>> paravirt_pagetable_setup_done? In general there was no section mismatch warning
>> for this function, but I've annotated it also.
> Most liekly yes - but I did not check.
GCC is ok, I mean it inlines paravirt_pagetable_setup_[start,done] even with
CONFIG_OPTIMIZE_INLINING=y:
$ objdump -t vmlinux.o | grep pagetable_setup_start
0000a418 g F .init.text 000000a1 native_pagetable_setup_start
While running with CONFIG_DEBUG_SECTION_MISMTCH=y it does not inline
paravirt_pagetable_setup_start (_done is OK):
$ objdump -t vmlinux.o | grep pagetable_setup_start
00017100 l F .text 0000000b paravirt_pagetable_setup_start
00009fb0 g F .init.text 00000089 native_pagetable_setup_start
DEBUG_SECTION_MISMATCH probably generated mismatch with smpboot_setup_io_apic()
(commit: 96c968742fa1e6d64f979464acf2fd90cdc117b3, already merged). I will check
and if __init is really superfluous I will post delta patch to remove all those
__init annotations.
Similar situation might be found with unlock_ExtINT_logic()
(arch/x86/kernel/io_apic_32.c), which I annotated with __init in one of previous
patches, but here, this function IMO shouldn't be marked inline.
-Jacek
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes
2008-04-14 11:21 ` Jacek Luczak
@ 2008-04-14 18:31 ` Sam Ravnborg
0 siblings, 0 replies; 10+ messages in thread
From: Sam Ravnborg @ 2008-04-14 18:31 UTC (permalink / raw)
To: Jacek Luczak; +Cc: Ingo Molnar, LKML
>
> GCC is ok, I mean it inlines paravirt_pagetable_setup_[start,done] even with
> CONFIG_OPTIMIZE_INLINING=y:
> $ objdump -t vmlinux.o | grep pagetable_setup_start
> 0000a418 g F .init.text 000000a1 native_pagetable_setup_start
>
> While running with CONFIG_DEBUG_SECTION_MISMTCH=y it does not inline
> paravirt_pagetable_setup_start (_done is OK):
> $ objdump -t vmlinux.o | grep pagetable_setup_start
> 00017100 l F .text 0000000b paravirt_pagetable_setup_start
> 00009fb0 g F .init.text 00000089 native_pagetable_setup_start
>
> DEBUG_SECTION_MISMATCH probably generated mismatch with smpboot_setup_io_apic()
> (commit: 96c968742fa1e6d64f979464acf2fd90cdc117b3, already merged). I will check
> and if __init is really superfluous I will post delta patch to remove all those
> __init annotations.
>
> Similar situation might be found with unlock_ExtINT_logic()
> (arch/x86/kernel/io_apic_32.c), which I annotated with __init in one of previous
> patches, but here, this function IMO shouldn't be marked inline.
Hi Jacek.
Please consider following code snippet:
static void __init foo() {}
static void __init bar() { foo(); }
static void __init baz() { bar(); }
Browsing this code it makes perfect sense that when baz()
is annotated __init bar and suddenly foo() has same annotation.
There is no point in removing the __init annotation of bar()
just becasue we happen to know it will be inlined by gcc.
Removing the __init anotation is actually wrong - because
the __init annotation has a two-fold purpose.
It is used to locate this function in a section that
is later discarded.
But it is also used to document that this function
is only used in the early init of this driver/what-ever.
So using this function in non-__init code is wrong.
Therefore I recommend to keep the __init annotation
also for the inline functions - assuming these functions
are supposed to be used only in the early init as the annotation
says they are.
Sam
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-04-14 18:31 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-13 15:41 [PATCH] x86: pgtable_32.h - prototype and section mismatch fixes Jacek Luczak
2008-04-14 7:26 ` Ingo Molnar
2008-04-14 8:41 ` Sam Ravnborg
2008-04-14 8:53 ` Ingo Molnar
2008-04-14 8:59 ` Sam Ravnborg
2008-04-14 9:11 ` Jacek Luczak
2008-04-14 9:52 ` Sam Ravnborg
2008-04-14 11:21 ` Jacek Luczak
2008-04-14 18:31 ` Sam Ravnborg
2008-04-14 8:59 ` Jacek Luczak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).