lkml.org 
[lkml]   [2009]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectFw: Re: [kernel] Re: kernel/rcutree.h:301: sorry, unimplemented: inlining failed in call to 'rcu_bootup_announce': function body not available
    Hello, Greg,

    Could you please consider the following commit for 2.6.32-stable?
    It fixes a build error that some people are seeing.

    Thanx, Paul

    dbe01350fa8ce0c11948ab7d6be71a4d901be151 rcu: Remove inline from forward-referenced functions

    ----- Forwarded message from "Mr. James W. Laferriere" <babydr@baby-dragons.com> -----

    Date: Fri, 18 Dec 2009 10:05:46 -0900 (AKST)
    From: "Mr. James W. Laferriere" <babydr@baby-dragons.com>
    To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    cc: Américo Wang <xiyou.wangcong@gmail.com>,
    Linux Kernel Maillist <linux-kernel@vger.kernel.org>
    Subject: Re: [kernel] Re: kernel/rcutree.h:301: sorry, unimplemented: inlining
    failed in call to 'rcu_bootup_announce': function body not available

    Hello Paul ,

    On Fri, 18 Dec 2009, Paul E. McKenney wrote:
    > On Fri, Dec 18, 2009 at 09:08:00AM -0900, Mr. James W. Laferriere wrote:
    >> On Fri, 18 Dec 2009, Paul E. McKenney wrote:
    >>> On Fri, Dec 18, 2009 at 08:07:51AM -0900, Mr. James W. Laferriere wrote:
    >>>> On Fri, 18 Dec 2009, Paul E. McKenney wrote:
    >>>>> On Fri, Dec 18, 2009 at 05:52:51PM +0800, Américo Wang wrote:
    >>>>>> On Fri, Dec 18, 2009 at 1:45 PM, Mr. James W. Laferriere
    >>>>>> <babydr@baby-dragons.com> wrote:
    >>>>>>>        Hello All ,
    >>>>>>>
    >>>>>>>  gcc -Wp,-MD,kernel/.rcutree.o.d  -nostdinc -isystem
    >>>>>>> /usr/lib/gcc/i486-slackware-linux/3.4.6/include -Iinclude
    >>>>>>> -I/usr/src/linux-2.6.32.1/arch/x86/include -include
    >>>>>>> include/linux/autoconf.h
    >>>>>>> -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs
    >>>>>>> -fno-strict-aliasing -fno-common
    >>>>>>> -Werror-implicit-function-declaration
    >>>>>>> -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32
    >>>>>>> -msoft-float
    >>>>>>> -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2
    >>>>>>> -fno-unit-at-a-time -march=i686 -ffreestanding -DCONFIG_AS_CFI=1
    >>>>>>> -pipe
    >>>>>>> -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx
    >>>>>>> -mno-sse2 -mno-3dnow -fno-omit-frame-pointer
    >>>>>>> -fno-optimize-sibling-calls
    >>>>>>> -g
    >>>>>>> -Wdeclaration-after-statement   -D"KBUILD_STR(s)=#s"
    >>>>>>> -D"KBUILD_BASENAME=KBUILD_STR(rcutree)"
    >>>>>>>  -D"KBUILD_MODNAME=KBUILD_STR(rcutree)" -c -o kernel/rcutree.o
    >>>>>>> kernel/rcutree.c
    >>>>>>> kernel/rcutree.c: In function `__rcu_init':
    >>>>>>> kernel/rcutree.h:301: sorry, unimplemented: inlining failed in call
    >>>>>>> to
    >>>>>>> 'rcu_bootup_announce': function body not available
    >>>>>>> kernel/rcutree.c:1740: sorry, unimplemented: called from here
    >>>>>>> make[1]: *** [kernel/rcutree.o] Error 1
    >>>>>>> make: *** [kernel] Error 2
    >>>>>>>
    >>>>>>>        There is no way ,  thru the 'make *config' methods to
    >>>>>>> disable this
    >>>>>>> broken stuff ,  So How may I get past this brokeness ?
    >>>>>>>        And looking the posts for the 2.6.32-pre/rc the old rcu
    >>>>>>> has
    >>>>>>> been
    >>>>>>> trashed completely .  So I am not able to even try using that .
    >>>>>>>
    >>>>>>>        Would someone please shed some light on this .  I really
    >>>>>>> need the
    >>>>>>> updates for the Fusion/mpt driver & the changes in the /md/ tree as
    >>>>>>> well
    >>>>>>> .
    >>>>>>
    >>>>>> Hmm, I see the problem, but not sure how to fix it...
    >>>>>>
    >>>>>> Paul, why do we have #include "rcutree_plugin.h" at the bottom
    >>>>>> of rcutree.c? This looks strange for me...
    >>>>>>
    >>>>>> How about moving it up? At least just move upper to rcu_init().
    >>>>>
    >>>>> Could you please apply commit
    >>>>> #dbe01350fa8ce0c11948ab7d6be71a4d901be151
    >>>>> from Linus's git tree? Corresponding diff attached.
    >>>>>
    >>>>> Thanx, Paul
    >>>>>
    >>>>> ------------------------------------------------------------------------
    >>>>>
    >>>>> diff --git a/kernel/rcutree.h b/kernel/rcutree.h
    >>>>> index c1891c3..ddb79ec 100644
    >>>>> --- a/kernel/rcutree.h
    >>>>> +++ b/kernel/rcutree.h
    >>>>> @@ -301,7 +301,7 @@ DECLARE_PER_CPU(struct rcu_data,
    >>>>> rcu_preempt_data);
    >>>>> #else /* #ifdef RCU_TREE_NONCORE */
    >>>>>
    >>>>> /* Forward declarations for rcutree_plugin.h */
    >>>>> -static inline void rcu_bootup_announce(void);
    >>>>> +static void rcu_bootup_announce(void);
    >>>>> long rcu_batches_completed(void);
    >>>>> static void rcu_preempt_note_context_switch(int cpu);
    >>>>> static int rcu_preempted_readers(struct rcu_node *rnp);
    >>>>> diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
    >>>>> index ef2a58c..c03edf7 100644
    >>>>> --- a/kernel/rcutree_plugin.h
    >>>>> +++ b/kernel/rcutree_plugin.h
    >>>>> @@ -33,7 +33,7 @@ DEFINE_PER_CPU(struct rcu_data, rcu_preempt_data);
    >>>>> /*
    >>>>> * Tell them what RCU they are running.
    >>>>> */
    >>>>> -static inline void rcu_bootup_announce(void)
    >>>>> +static void rcu_bootup_announce(void)
    >>>>> {
    >>>>> printk(KERN_INFO
    >>>>> "Experimental preemptable hierarchical RCU
    >>>>> implementation.\n");
    >>>>> @@ -481,7 +481,7 @@ void exit_rcu(void)
    >>>>> /*
    >>>>> * Tell them what RCU they are running.
    >>>>> */
    >>>>> -static inline void rcu_bootup_announce(void)
    >>>>> +static void rcu_bootup_announce(void)
    >>>>> {
    >>>>> printk(KERN_INFO "Hierarchical RCU implementation.\n");
    >>>>> }
    >>>>
    >>>> Thank you & Americo for responding .
    >>>>
    >>>> Patch applied & same error as far as I can tell .
    >>>> did
    >>>>
    >>>> make mrproper
    >>>> cp ../old.config .config (same as in previous email)
    >>>> make oldconfig
    >>>> ( time make V=1 KBUILD_VERBOSE=1 INSTALL_PATH=/boot clean all install
    >>>> modules_install ) >../linux-2.6.32.1d.log 2>&1
    >>>> error'd (See below) ...
    >>>>
    >>>> If there is any further info I can provide or something I can do to
    >>>> provide , Please request it .
    >>>
    >>> Hmmm.... Yes. Could you please execute the following command from
    >>> the top-level directory of your patched kernel source tree?
    >>>
    >>> grep rcu_bootup_announce kernel/rcu*
    >>>
    >>> I would expect the following output:
    >>>
    >>> kernel/rcutree.c: rcu_bootup_announce();
    >>> kernel/rcutree.h:static void rcu_bootup_announce(void);
    >>> kernel/rcutree_plugin.h:static void __init rcu_bootup_announce(void)
    >>> kernel/rcutree_plugin.h:static void __init rcu_bootup_announce(void)
    >>>
    >>> Thanx, Paul
    >>
    >> This is with your patch applied on top of linux-2.6.32.1.tar.gz
    >> no other patches or additions .
    >>
    >> OK , it looks like I wandered right by the first file ie:
    >> 'kernel/rcutree.h' so I need to patch that as well . Doing this by hand
    >> as
    >> the offending system is not online and all I have is serial console
    >> access
    >> presently .
    >> But , the last two you've changed to 'void __init' instead of just
    >> 'void'
    >> .
    >> Do you want me to add those changes to the file
    >> 'kernel/rcutree_plugin.h'
    >> as well ?
    >
    > We were starting from different places. The important thing is to
    > remove the "inline" declarations.
    Ok , That was the very reason for why I asked this question .

    >> # grep rcu_bootup_announce kernel/rcu*
    >> kernel/rcutree.c: rcu_bootup_announce();
    >> kernel/rcutree.h:static inline void rcu_bootup_announce(void);
    >
    > The above "inline" needs to go as well. (Ah, as you noted above.)
    > Strange -- this change -was- in the patch I sent.
    I also mentioned not seeing the first file in the patch so I had to go
    back & edit it also .

    >> kernel/rcutree_plugin.h:static void rcu_bootup_announce(void)
    >> kernel/rcutree_plugin.h:static void rcu_bootup_announce(void)
    >
    > Does removing all three "inline" directives fix your build?
    >
    > Thanx, Paul
    Yes , Removing the 'inline's from all three locations gets me past the
    rcu error issue . But now I am into errors in the code that I was really
    interested in getting 2.6.32 for are now error'ng . I'll place those
    errors onto the list & other authors in another email .

    Thank you , for your efforts & the success . JimL
    --
    +------------------------------------------------------------------+
    | James W. Laferriere | System Techniques | Give me VMS |
    | Network&System Engineer | 3237 Holden Road | Give me Linux |
    | babydr@baby-dragons.com | Fairbanks, AK. 99709 | only on AXP |
    +------------------------------------------------------------------+


    ----- End forwarded message -----
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2009-12-18 21:27    [W:0.053 / U:30.572 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site