2013-07-25 12:14:46

by Tom Rini

[permalink] [raw]
Subject: [PATCH] numa: Mark __node_set as __always_inline

It is posible for some compilers to decide that __node_set does not need
to be made turned into an inline function. When the compiler does this
on an __init function calling it on __initdata we get a section mismatch
warning now.

Reported-by: Paul Bolle <[email protected]>
Cc: Jianpeng Ma <[email protected]>
Cc: Rusty Russell <[email protected]>
Cc: Lai Jiangshan <[email protected]>
Cc: Yasuaki Ishimatsu <[email protected]>
Cc: Wen Congyang <[email protected]>
Cc: Jiang Liu <[email protected]>
Cc: KOSAKI Motohiro <[email protected]>
Cc: Minchan Kim <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Yinghai Lu <[email protected]>
Cc: Greg KH <[email protected]>
Signed-off-by: Tom Rini <[email protected]>
---
include/linux/nodemask.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index 4e2cbfa..10d0fd9 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -99,7 +99,7 @@ typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
extern nodemask_t _unused_nodemask_arg_;

#define node_set(node, dst) __node_set((node), &(dst))
-static inline void __node_set(int node, volatile nodemask_t *dstp)
+static __always_inline void __node_set(int node, volatile nodemask_t *dstp)
{
set_bit(node, dstp->bits);
}
--
1.7.9.5


2013-07-25 18:08:35

by KOSAKI Motohiro

[permalink] [raw]
Subject: Re: [PATCH] numa: Mark __node_set as __always_inline

(7/25/13 8:14 AM), Tom Rini wrote:
> It is posible for some compilers to decide that __node_set does not need
> to be made turned into an inline function. When the compiler does this
> on an __init function calling it on __initdata we get a section mismatch
> warning now.
>
> Reported-by: Paul Bolle <[email protected]>
> Cc: Jianpeng Ma <[email protected]>
> Cc: Rusty Russell <[email protected]>
> Cc: Lai Jiangshan <[email protected]>
> Cc: Yasuaki Ishimatsu <[email protected]>
> Cc: Wen Congyang <[email protected]>
> Cc: Jiang Liu <[email protected]>
> Cc: KOSAKI Motohiro <[email protected]>
> Cc: Minchan Kim <[email protected]>
> Cc: Mel Gorman <[email protected]>
> Cc: David Rientjes <[email protected]>
> Cc: Yinghai Lu <[email protected]>
> Cc: Greg KH <[email protected]>
> Signed-off-by: Tom Rini <[email protected]>
> ---
> include/linux/nodemask.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
> index 4e2cbfa..10d0fd9 100644
> --- a/include/linux/nodemask.h
> +++ b/include/linux/nodemask.h
> @@ -99,7 +99,7 @@ typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
> extern nodemask_t _unused_nodemask_arg_;
>
> #define node_set(node, dst) __node_set((node), &(dst))
> -static inline void __node_set(int node, volatile nodemask_t *dstp)
> +static __always_inline void __node_set(int node, volatile nodemask_t *dstp)

The change looks ok. But, this code doesn't tell us why you changed. Please write
down proper comments here.

> {
> set_bit(node, dstp->bits);
> }
>

2013-07-25 18:50:17

by Tom Rini

[permalink] [raw]
Subject: Re: [PATCH] numa: Mark __node_set as __always_inline

On 07/25/2013 02:08 PM, KOSAKI Motohiro wrote:
> (7/25/13 8:14 AM), Tom Rini wrote:
>> It is posible for some compilers to decide that __node_set does not need
>> to be made turned into an inline function. When the compiler does this
>> on an __init function calling it on __initdata we get a section mismatch
>> warning now.
>>
>> Reported-by: Paul Bolle <[email protected]>
>> Cc: Jianpeng Ma <[email protected]>
>> Cc: Rusty Russell <[email protected]>
>> Cc: Lai Jiangshan <[email protected]>
>> Cc: Yasuaki Ishimatsu <[email protected]>
>> Cc: Wen Congyang <[email protected]>
>> Cc: Jiang Liu <[email protected]>
>> Cc: KOSAKI Motohiro <[email protected]>
>> Cc: Minchan Kim <[email protected]>
>> Cc: Mel Gorman <[email protected]>
>> Cc: David Rientjes <[email protected]>
>> Cc: Yinghai Lu <[email protected]>
>> Cc: Greg KH <[email protected]>
>> Signed-off-by: Tom Rini <[email protected]>
>> ---
>> include/linux/nodemask.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
>> index 4e2cbfa..10d0fd9 100644
>> --- a/include/linux/nodemask.h
>> +++ b/include/linux/nodemask.h
>> @@ -99,7 +99,7 @@ typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
>> extern nodemask_t _unused_nodemask_arg_;
>>
>> #define node_set(node, dst) __node_set((node), &(dst))
>> -static inline void __node_set(int node, volatile nodemask_t *dstp)
>> +static __always_inline void __node_set(int node, volatile nodemask_t *dstp)
>
> The change looks ok. But, this code doesn't tell us why you changed. Please write
> down proper comments here.

Done, v2 submitted.

--
Tom