2010-01-14 22:16:26

by Hartley Sweeten

[permalink] [raw]
Subject: [PATCH] prio_tree.c: quiet sparse noise

prio_tree.c: quiet sparse noise

The function prio_tree_init is called during start_kernel. Since it
is an __init function it is not exposed as an exported symbol.
A sparse build produces the following warning because of this:

warning: symbol 'prio_tree_init' was not declared. Should it be static?

Quiet the warning by declaring the function as an extern before
it's definition.

Signed-off-by: H Hartley Sweeten <[email protected]>

---

diff --git a/lib/prio_tree.c b/lib/prio_tree.c
index ccfd850..a677200 100644
--- a/lib/prio_tree.c
+++ b/lib/prio_tree.c
@@ -68,6 +68,9 @@ static void get_index(const struct prio_tree_root *root,

static unsigned long index_bits_to_maxindex[BITS_PER_LONG];

+/* Keep sparse happy since this is not an EXPORT_SYMBOL */
+extern void prio_tree_init(void);
+
void __init prio_tree_init(void)
{
unsigned int i;


2010-01-15 00:52:12

by Li Zefan

[permalink] [raw]
Subject: Re: [PATCH] prio_tree.c: quiet sparse noise

H Hartley Sweeten wrote:
> prio_tree.c: quiet sparse noise
>
> The function prio_tree_init is called during start_kernel. Since it
> is an __init function it is not exposed as an exported symbol.
> A sparse build produces the following warning because of this:
>
> warning: symbol 'prio_tree_init' was not declared. Should it be static?
>
> Quiet the warning by declaring the function as an extern before
> it's definition.
>

Why don't you add a declaration of prio_tree_init() to prio_tree.h,
and let kernel/main.c include it?

> Signed-off-by: H Hartley Sweeten <[email protected]>
>
> ---
>
> diff --git a/lib/prio_tree.c b/lib/prio_tree.c
> index ccfd850..a677200 100644
> --- a/lib/prio_tree.c
> +++ b/lib/prio_tree.c
> @@ -68,6 +68,9 @@ static void get_index(const struct prio_tree_root *root,
>
> static unsigned long index_bits_to_maxindex[BITS_PER_LONG];
>
> +/* Keep sparse happy since this is not an EXPORT_SYMBOL */
> +extern void prio_tree_init(void);
> +
> void __init prio_tree_init(void)
> {
> unsigned int i;
> --

2010-01-15 01:34:37

by Hartley Sweeten

[permalink] [raw]
Subject: RE: [PATCH] prio_tree.c: quiet sparse noise

On Thursday, January 14, 2010 5:52 PM, Li Zefan wrote:
> H Hartley Sweeten wrote:
>> prio_tree.c: quiet sparse noise
>>
>> The function prio_tree_init is called during start_kernel. Since it
>> is an __init function it is not exposed as an exported symbol.
>> A sparse build produces the following warning because of this:
>>
>> warning: symbol 'prio_tree_init' was not declared. Should it be static?
>>
>> Quiet the warning by declaring the function as an extern before
>> it's definition.
>>
>
> Why don't you add a declaration of prio_tree_init() to prio_tree.h,
> and let kernel/main.c include it?

I don't think that's a good idea.

Since the function is __init it will be reaped by free_initmem in
init_post. If the function is exposed in the header someone might
try to call it after than happens. My guess is that's a bad thing...

Maybe a new <linux/init_funcs.h> could be created that has a big
fat warning about free_initmem? Then all the various init's could
be declared to remove all the sparse warnings. These are the main
ones I see in init/main.c but there are probably others:

extern void init_IRQ(void); <- arch specific
extern void fork_init(unsigned long); <- kernel/fork.c
extern void prio_tree_init(void); <- lib/prio_tree.c
extern void radix_tree_init(void); <- lib/radix-tree.c
extern void free_initmem(void); <- arch specific
extern void time_init(void); <- arch specific
extern void softirq_init(void); <- kernel/softirq.c


Regards,
Hartley

>> Signed-off-by: H Hartley Sweeten <[email protected]>
>>
>> ---
>>
>> diff --git a/lib/prio_tree.c b/lib/prio_tree.c
>> index ccfd850..a677200 100644
>> --- a/lib/prio_tree.c
>> +++ b/lib/prio_tree.c
>> @@ -68,6 +68,9 @@ static void get_index(const struct prio_tree_root *root,
>>
>> static unsigned long index_bits_to_maxindex[BITS_PER_LONG];
>>
>> +/* Keep sparse happy since this is not an EXPORT_SYMBOL */
>> +extern void prio_tree_init(void);
>> +
>> void __init prio_tree_init(void)
>> {
>> unsigned int i;
>> --
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?