lkml.org 
[lkml]   [2008]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Linux 2.6.24-rc7 Build-Failure at __you_cannot_kmalloc_that_much
    On Tue, Jan 08, 2008 at 10:56:09AM +0100, Jean Delvare wrote:
    > Hi Andrew, hi Chritoph,
    >
    > On Mon, 7 Jan 2008 11:38:31 -0800, Andrew Morton wrote:
    > > On Mon, 7 Jan 2008 10:31:53 -0800 (PST)
    > > Christoph Lameter <clameter@sgi.com> wrote:
    > >
    > > > On Mon, 7 Jan 2008, Andrew Morton wrote:
    > > >
    > > > > > : undefined reference to `__you_cannot_kmalloc_that_much'
    > > >
    > > > There is also a kernel.org bugzilla for this at
    > > >
    > > > http://bugzilla.kernel.org/show_bug.cgi?id=9669
    > > > For some reason my adds to this do not show up.
    > > >
    > > > In both cases we have a
    > > >
    > > > k(z/m)alloc(sizeof(*pointer), ...)
    > > >
    > > > that is for some reason failing. I guess what happens is that the function
    > > > in which this occurs is too complex for gcc 3.2. Thus it stops constant
    > > > folding the sizeof(*pointer) in the complex inline-if-cascade that SLAB
    > > > needs to determine the cache and does not eliminate the
    > > > __you_cannot_kmalloc_that_much branch().
    >
    > Interesting theory... So I tried to split half of the code of
    > dmi_id_init() to a subfunction and bingo! gcc 3.2.3 is now able to
    > build it properly. Thanks for the hint!
    >
    > > > SLUB in that case just puts a series of if comparisions in the code. This
    > > > means compilation does not fail but a large amount of code is generated.
    > >
    > > ug. Silent and nasty.
    > >
    > > > We could replace the __you_cannot_kmalloc_that_much() with a BUG()
    > > > statement so we have the same effect in SLAB?
    > >
    > > I think it'd be better to just put suitable workarounds at the offending
    > > callsites. We've only seen three or four of them in several months.
    >
    > Here's a workaround for dmi-id.
    >
    > Subject: Fix for __you_cannot_kmalloc_that_much failure in dmi-id
    >
    > gcc 3.2 has a hard time coping with the code in dmi_id_init():
    >
    > drivers/built-in.o(.init.text+0x789e): In function `dmi_id_init':
    > : undefined reference to `__you_cannot_kmalloc_that_much'
    > make: *** [.tmp_vmlinux1] Error 1
    >
    > Moving half of the code to a separate function seems to help. This is
    > a no-op for gcc 4.1 which will successfully inline the code anyway.

    Hi Jean,

    Thank you, I have tested the patch, it fixes the build failure.


    Tested-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
    Signed-off-by: Jean Delvare <khali@linux-fr.org>
    ---
    drivers/firmware/dmi-id.c | 19 ++++++++++++++-----
    1 file changed, 14 insertions(+), 5 deletions(-)

    --- linux-2.6.24-rc7.orig/drivers/firmware/dmi-id.c 2007-10-24 09:59:28.000000000 +0200
    +++ linux-2.6.24-rc7/drivers/firmware/dmi-id.c 2008-01-08 10:32:00.000000000 +0100
    @@ -175,12 +175,11 @@ static struct device *dmi_dev;

    extern int dmi_available;

    -static int __init dmi_id_init(void)
    +/* In a separate function to keep gcc 3.2 happy - do NOT merge this in
    + dmi_id_init! */
    +static void __init dmi_id_init_attr_table(void)
    {
    - int ret, i;
    -
    - if (!dmi_available)
    - return -ENODEV;
    + int i;

    /* Not necessarily all DMI fields are available on all
    * systems, hence let's built an attribute table of just
    @@ -205,6 +204,16 @@ static int __init dmi_id_init(void)
    ADD_DMI_ATTR(chassis_serial, DMI_CHASSIS_SERIAL);
    ADD_DMI_ATTR(chassis_asset_tag, DMI_CHASSIS_ASSET_TAG);
    sys_dmi_attributes[i++] = &sys_dmi_modalias_attr.attr;
    +}
    +
    +static int __init dmi_id_init(void)
    +{
    + int ret;
    +
    + if (!dmi_available)
    + return -ENODEV;
    +
    + dmi_id_init_attr_table();

    ret = class_register(&dmi_class);
    if (ret)
    I'll now check if I can do something similar for snd-mixer-oss.

    --
    Jean Delvare


    \
     
     \ /
      Last update: 2008-01-08 11:53    [W:0.050 / U:0.288 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site