lkml.org 
[lkml]   [2008]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [RFC patch 16/27] Immediate Values Support init
    >  #else
    >
    > @@ -73,7 +76,9 @@ extern void imv_update_range(const struc
    >
    > static inline void core_imv_update(void) { }
    > static inline void module_imv_update(void) { }
    > -
    > +static inline void imv_unref_core_init(void) { }
    > +static inline void imv_unref_init(struct __imv *begin, struct __imv *end,
    > + void *init, unsigned long init_size) { }
    > #endif

    err.
    When turn off CONFIG_IMMEDIATE, "struct __imv" is not defined.
    is cause following warnings.

    include/linux/immediate.h:81: warning: 'struct __imv' declared inside parameter list
    include/linux/immediate.h:81: warning: its scope is only this definition or declaration, \
    which is probably not what you want


    and

    > +extern void imv_unref(struct __imv *begin, struct __imv *end, void *start,
    > + unsigned long size);
    >
    > #else
    >
    > (snip)
    > +static inline void imv_unref_init(struct __imv *begin, struct __imv *end,
    > + void *init, unsigned long init_size) { }
    > #endif

    if CONFIG_IMMEDIATE is on, imv_unref() is declared.
    but if CONFIG_IMMEDIATE is off, imv_unref_init() is declared instead imv_unref()
    it cause following error.


    CC kernel/module.o
    kernel/module.c: In function 'sys_init_module':
    kernel/module.c:2211: error: implicit declaration of function 'imv_unref'
    kernel/module.c:2211: error: 'struct module' has no member named 'immediate'
    kernel/module.c:2211: error: 'struct module' has no member named 'immediate'
    kernel/module.c:2211: error: 'struct module' has no member named 'num_immediate'
    make[1]: *** [kernel/module.o] Error 1


    and,

    in kernel/module.c#sys_init_module(),
    immediate member of struct module is used though CONFIG_IMMEDIATE is off.

    > imv_unref(mod->immediate, mod->immediate + mod->num_immediate,
    > mod->module_init, mod->init_size);

    it cause following error.

    CC kernel/module.o
    kernel/module.c: In function 'sys_init_module':
    kernel/module.c:2211: error: 'struct module' has no member named 'immediate'
    kernel/module.c:2211: error: 'struct module' has no member named 'immediate'
    kernel/module.c:2211: error: 'struct module' has no member named 'num_immediate'
    make[1]: *** [kernel/module.o] Error 1


    bellow patch fixed these.


    Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>

    ---
    include/linux/immediate.h | 8 ++++++--
    include/linux/module.h | 21 +++++++++++++++++++++
    kernel/module.c | 3 ++-
    3 files changed, 29 insertions(+), 3 deletions(-)

    Index: b/include/linux/immediate.h
    ===================================================================
    --- a/include/linux/immediate.h 2008-04-19 19:53:03.000000000 +0900
    +++ b/include/linux/immediate.h 2008-04-19 20:04:58.000000000 +0900
    @@ -56,6 +56,10 @@ extern void imv_unref(struct __imv *begi
    * Generic immediate values: a simple, standard, memory load.
    */

    +/* empty declaration for avoid warning */
    +struct __imv {
    +};
    +
    /**
    * imv_read - read immediate variable
    * @name: immediate value name
    @@ -77,8 +81,8 @@ extern void imv_unref(struct __imv *begi
    static inline void core_imv_update(void) { }
    static inline void module_imv_update(void) { }
    static inline void imv_unref_core_init(void) { }
    -static inline void imv_unref_init(struct __imv *begin, struct __imv *end,
    - void *init, unsigned long init_size) { }
    +static inline void imv_unref(struct __imv *begin, struct __imv *end,
    + void *start, unsigned long size) { }
    #endif

    #define DECLARE_IMV(type, name) extern __typeof__(type) name##__imv
    Index: b/include/linux/module.h
    ===================================================================
    --- a/include/linux/module.h 2008-04-19 19:53:03.000000000 +0900
    +++ b/include/linux/module.h 2008-04-19 20:22:14.000000000 +0900
    @@ -634,4 +634,25 @@ static inline void module_remove_modinfo

    #define __MODULE_STRING(x) __stringify(x)

    +#ifdef CONFIG_IMMEDIATE
    +static inline struct __imv* mod_immediate_address(struct module* mod)
    +{
    + return mod->immediate;
    +}
    +static inline unsigned int mod_num_immediate(struct module* mod)
    +{
    + return mod->num_immediate;
    +}
    +#else
    +static inline struct __imv* mod_immediate_address(struct module* mod)
    +{
    + return NULL;
    +}
    +static inline unsigned int mod_num_immediate(struct module* mod)
    +{
    + return 0;
    +}
    +#endif
    +
    +
    #endif /* _LINUX_MODULE_H */
    Index: b/kernel/module.c
    ===================================================================
    --- a/kernel/module.c 2008-04-19 19:53:03.000000000 +0900
    +++ b/kernel/module.c 2008-04-19 20:23:51.000000000 +0900
    @@ -2208,7 +2208,8 @@ sys_init_module(void __user *umod,
    /* Drop initial reference. */
    module_put(mod);
    unwind_remove_table(mod->unwind_info, 1);
    - imv_unref(mod->immediate, mod->immediate + mod->num_immediate,
    + imv_unref(mod_immediate_address(mod),
    + mod_immediate_address(mod) + mod_num_immediate(mod),
    mod->module_init, mod->init_size);
    module_free(mod, mod->module_init);
    mod->module_init = NULL;




    \
     
     \ /
      Last update: 2008-04-19 13:07    [W:0.028 / U:149.800 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site