lkml.org 
[lkml]   [2008]   [Mar]   [21]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    DateFri, 21 Mar 2008 15:43:33 -0700
    FromChris Wright <>
    Subject[patch 43/76] moduleparam: fix alpha, ia64 and ppc64 compile failures
    -stable review patch.  If anyone has any objections, please let us know.
    ---------------------
    From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    
    [upstream commit: 91d35dd9]
    
    On alpha, ia64 and ppc64 only relocations to local data can go into
    read-only sections. The vast majority of module parameters use the global
    generic param_set_*/param_get_* functions, so the 'const' attribute for
    struct kernel_param is not only useless, but it also causes compile
    failures due to 'section type conflict' in those rare cases where
    param_set/get are local functions.
    
    This fixes http://bugzilla.kernel.org/show_bug.cgi?id=8964
    
    Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    Cc: Richard Henderson <rth@twiddle.net>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Anton Blanchard <anton@samba.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Adrian Bunk <bunk@stusta.de>
    Cc: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Pagano <mpagano@gentoo.org>
    [chrisw@sous-sol.org: backport to 2.6.24.3]
    Signed-off-by: Chris Wright <chrisw@sous-sol.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
     include/linux/moduleparam.h |   12 +++++++++++-
     1 file changed, 11 insertions(+), 1 deletion(-)
    --- a/include/linux/moduleparam.h
    +++ b/include/linux/moduleparam.h
    @@ -62,6 +62,16 @@ struct kparam_array
     	void *elem;
     };
     
    +/* On alpha, ia64 and ppc64 relocations to global data cannot go into
    +   read-only sections (which is part of respective UNIX ABI on these
    +   platforms). So 'const' makes no sense and even causes compile failures
    +   with some compilers. */
    +#if defined(CONFIG_ALPHA) || defined(CONFIG_IA64) || defined(CONFIG_PPC64)
    +#define __moduleparam_const
    +#else
    +#define __moduleparam_const const
    +#endif
    +
     /* This is the fundamental function for registering boot/module
        parameters.  perm sets the visibility in sysfs: 000 means it's
        not there, read bits mean it's readable, write bits mean it's
    @@ -71,7 +81,7 @@ struct kparam_array
     	static int __param_perm_check_##name __attribute__((unused)) =	\
     	BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2));	\
     	static const char __param_str_##name[] = prefix #name;		\
    -	static struct kernel_param const __param_##name			\
    +	static struct kernel_param __moduleparam_const __param_##name	\
     	__attribute_used__						\
         __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
     	= { __param_str_##name, perm, set, get, { arg } }
    -- 
    
    
    
    \
     
     \ /
      Last update: 2008-03-22 00:19    [from the cache]
    ©2003-2008