lkml.org 
[lkml]   [2007]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] Factor out common MODULE_INFO content from module*.h files.

    In order to eventually break the interdependency between the module.h
    and moduleparam.h header files, factor out the common MODULE_INFO
    content into a new header file.

    Signed-off-by: Robert P. J. Day <rpjday@mindspring.com>

    ---

    this patch doesn't actually start cleaning up the mess related to
    module.h and moduleparam.h files, but it at least allows that cleanup
    process to start. a major goal would be to eventually remove that
    inclusion of moduleparam.h from module.h, which simply shouldn't be
    there.

    compile-tested with "make allmodconfig" on x86.


    include/linux/module.h | 12 +++---------
    include/linux/moduleparam.h | 16 +++++-----------
    2 files changed, 8 insertions(+), 20 deletions(-)

    diff --git a/include/linux/module.h b/include/linux/module.h
    index e6e0f86..d9a9a13 100644
    --- a/include/linux/module.h
    +++ b/include/linux/module.h
    @@ -15,7 +15,8 @@
    #include <linux/elf.h>
    #include <linux/stringify.h>
    #include <linux/kobject.h>
    -#include <linux/moduleparam.h>
    +#include <linux/moduleparam.h> /* Ideally, this shouldn't be necessary. */
    +#include <linux/moduleinfo.h>
    #include <asm/local.h>

    #include <asm/module.h>
    @@ -88,9 +89,6 @@ extern struct module __this_module;
    #define THIS_MODULE ((struct module *)0)
    #endif

    -/* Generic info of form tag = "info" */
    -#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
    -
    /* For userspace: you can also call me... */
    #define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias)

    @@ -130,11 +128,6 @@ extern struct module __this_module;
    /* What your module does. */
    #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)

    -/* One for each parameter, describing how to use it. Some files do
    - multiple of these per line, so can't just use MODULE_INFO. */
    -#define MODULE_PARM_DESC(_parm, desc) \
    - __MODULE_INFO(parm, _parm, #_parm ":" desc)
    -
    #define MODULE_DEVICE_TABLE(type,name) \
    MODULE_GENERIC_TABLE(type##_device,name)

    @@ -576,6 +569,7 @@ struct device_driver;
    struct module;

    extern struct kset module_subsys;
    +struct kernel_param;

    int mod_sysfs_init(struct module *mod);
    int mod_sysfs_setup(struct module *mod,
    diff --git a/include/linux/moduleinfo.h b/include/linux/moduleinfo.h
    new file mode 100644
    index 0000000..cd9937b
    --- /dev/null
    +++ b/include/linux/moduleinfo.h
    @@ -0,0 +1,18 @@
    +#ifndef _LINUX_MODULEINFO_H
    +#define _LINUX_MODULEINFO_H
    +
    +#ifdef MODULE
    +#include <linux/stringify.h>
    +#define ___module_cat(a,b) __mod_ ## a ## b
    +#define __module_cat(a,b) ___module_cat(a,b)
    +#define __MODULE_INFO(tag, name, info) \
    +static const char __module_cat(name,__LINE__)[] \
    + __maybe_unused \
    + __attribute__((section(".modinfo"))) = __stringify(tag) "=" info
    +#else /* !MODULE */
    +#define __MODULE_INFO(tag, name, info)
    +#endif
    +
    +#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
    +
    +#endif // _LINUX_MODULEINFO_H
    diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
    index c83588c..650328d 100644
    --- a/include/linux/moduleparam.h
    +++ b/include/linux/moduleparam.h
    @@ -4,6 +4,7 @@
    #include <linux/init.h>
    #include <linux/stringify.h>
    #include <linux/kernel.h>
    +#include <linux/moduleinfo.h>

    /* You can override this manually, but generally this should match the
    module name. */
    @@ -13,19 +14,12 @@
    #define MODULE_PARAM_PREFIX KBUILD_MODNAME "."
    #endif

    -#ifdef MODULE
    -#define ___module_cat(a,b) __mod_ ## a ## b
    -#define __module_cat(a,b) ___module_cat(a,b)
    -#define __MODULE_INFO(tag, name, info) \
    -static const char __module_cat(name,__LINE__)[] \
    - __attribute_used__ \
    - __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info
    -#else /* !MODULE */
    -#define __MODULE_INFO(tag, name, info)
    -#endif
    -#define __MODULE_PARM_TYPE(name, _type) \
    +#define __MODULE_PARM_TYPE(name, _type) \
    __MODULE_INFO(parmtype, name##type, #name ":" _type)

    +#define MODULE_PARM_DESC(_parm, desc) \
    + __MODULE_INFO(parm, _parm, #_parm ":" desc)
    +
    struct kernel_param;

    /* Returns 0, or -errno. arg is in kp->arg. */
    --
    ========================================================================
    Robert P. J. Day
    Linux Consulting, Training and Annoying Kernel Pedantry
    Waterloo, Ontario, CANADA
    http://fsdev.net/wiki/index.php?title=Main_Page
    ========================================================================
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-05-20 21:09    [W:0.026 / U:89.940 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site