linux/include/linux/module.h
<<
>>
Prefs
   1#ifndef _LINUX_MODULE_H
   2#define _LINUX_MODULE_H
   3/*
   4 * Dynamic loading of modules into the kernel.
   5 *
   6 * Rewritten by Richard Henderson <rth@tamu.edu> Dec 1996
   7 * Rewritten again by Rusty Russell, 2002
   8 */
   9#include <linux/config.h>
  10#include <linux/sched.h>
  11#include <linux/spinlock.h>
  12#include <linux/list.h>
  13#include <linux/stat.h>
  14#include <linux/compiler.h>
  15#include <linux/cache.h>
  16#include <linux/kmod.h>
  17#include <linux/elf.h>
  18#include <linux/stringify.h>
  19#include <linux/kobject.h>
  20#include <linux/moduleparam.h>
  21#include <asm/local.h>
  22
  23#include <asm/module.h>
  24
  25/* Not Yet Implemented */
  26#define MODULE_SUPPORTED_DEVICE(name)
  27
  28/* v850 toolchain uses a `_' prefix for all user symbols */
  29#ifndef MODULE_SYMBOL_PREFIX
  30#define MODULE_SYMBOL_PREFIX ""
  31#endif
  32
  33#define MODULE_NAME_LEN (64 - sizeof(unsigned long))
  34
  35struct kernel_symbol
  36{
  37        unsigned long value;
  38        const char *name;
  39};
  40
  41struct modversion_info
  42{
  43        unsigned long crc;
  44        char name[MODULE_NAME_LEN];
  45};
  46
  47struct module;
  48
  49struct module_attribute {
  50        struct attribute attr;
  51        ssize_t (*show)(struct module_attribute *, struct module *, char *);
  52        ssize_t (*store)(struct module_attribute *, struct module *,
  53                         const char *, size_t count);
  54        void (*setup)(struct module *, const char *);
  55        int (*test)(struct module *);
  56        void (*free)(struct module *);
  57};
  58
  59struct module_kobject
  60{
  61        struct kobject kobj;
  62        struct module *mod;
  63};
  64
  65/* These are either module local, or the kernel's dummy ones. */
  66extern int init_module(void);
  67extern void cleanup_module(void);
  68
  69/* Archs provide a method of finding the correct exception table. */
  70struct exception_table_entry;
  71
  72const struct exception_table_entry *
  73search_extable(const struct exception_table_entry *first,
  74               const struct exception_table_entry *last,
  75               unsigned long value);
  76void sort_extable(struct exception_table_entry *start,
  77                  struct exception_table_entry *finish);
  78void sort_main_extable(void);
  79
  80extern struct subsystem module_subsys;
  81
  82#ifdef MODULE
  83#define MODULE_GENERIC_TABLE(gtype,name)                        \
  84extern const struct gtype##_id __mod_##gtype##_table            \
  85  __attribute__ ((unused, alias(__stringify(name))))
  86
  87extern struct module __this_module;
  88#define THIS_MODULE (&__this_module)
  89#else  /* !MODULE */
  90#define MODULE_GENERIC_TABLE(gtype,name)
  91#define THIS_MODULE ((struct module *)0)
  92#endif
  93
  94/* Generic info of form tag = "info" */
  95#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
  96
  97/* For userspace: you can also call me... */
  98#define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias)
  99
 100/*
 101 * The following license idents are currently accepted as indicating free
 102 * software modules
 103 *
 104 *      "GPL"                           [GNU Public License v2 or later]
 105 *      "GPL v2"                        [GNU Public License v2]
 106 *      "GPL and additional rights"     [GNU Public License v2 rights and more]
 107 *      "Dual BSD/GPL"                  [GNU Public License v2
 108 *                                       or BSD license choice]
 109 *      "Dual MPL/GPL"                  [GNU Public License v2
 110 *                                       or Mozilla license choice]
 111 *
 112 * The following other idents are available
 113 *
 114 *      "Proprietary"                   [Non free products]
 115 *
 116 * There are dual licensed components, but when running with Linux it is the
 117 * GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL
 118 * is a GPL combined work.
 119 *
 120 * This exists for several reasons
 121 * 1.   So modinfo can show license info for users wanting to vet their setup 
 122 *      is free
 123 * 2.   So the community can ignore bug reports including proprietary modules
 124 * 3.   So vendors can do likewise based on their own policies
 125 */
 126#define MODULE_LICENSE(_license) MODULE_INFO(license, _license)
 127
 128/* Author, ideally of form NAME <EMAIL>[, NAME <EMAIL>]*[ and NAME <EMAIL>] */
 129#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
 130  
 131/* What your module does. */
 132#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
 133
 134/* One for each parameter, describing how to use it.  Some files do
 135   multiple of these per line, so can't just use MODULE_INFO. */
 136#define MODULE_PARM_DESC(_parm, desc) \
 137        __MODULE_INFO(parm, _parm, #_parm ":" desc)
 138
 139#define MODULE_DEVICE_TABLE(type,name)          \
 140  MODULE_GENERIC_TABLE(type##_device,name)
 141
 142/* Version of form [<epoch>:]<version>[-<extra-version>].
 143   Or for CVS/RCS ID version, everything but the number is stripped.
 144  <epoch>: A (small) unsigned integer which allows you to start versions
 145           anew. If not mentioned, it's zero.  eg. "2:1.0" is after
 146           "1:2.0".
 147  <version>: The <version> may contain only alphanumerics and the
 148           character `.'.  Ordered by numeric sort for numeric parts,
 149           ascii sort for ascii parts (as per RPM or DEB algorithm).
 150  <extraversion>: Like <version>, but inserted for local
 151           customizations, eg "rh3" or "rusty1".
 152
 153  Using this automatically adds a checksum of the .c files and the
 154  local headers in "srcversion".
 155*/
 156#define MODULE_VERSION(_version) MODULE_INFO(version, _version)
 157
 158/* Given an address, look for it in the exception tables */
 159const struct exception_table_entry *search_exception_tables(unsigned long add);
 160
 161struct notifier_block;
 162
 163#ifdef CONFIG_MODULES
 164
 165/* Get/put a kernel symbol (calls must be symmetric) */
 166void *__symbol_get(const char *symbol);
 167void *__symbol_get_gpl(const char *symbol);
 168#define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x)))
 169
 170#ifndef __GENKSYMS__
 171#ifdef CONFIG_MODVERSIONS
 172/* Mark the CRC weak since genksyms apparently decides not to
 173 * generate a checksums for some symbols */
 174#define __CRC_SYMBOL(sym, sec)                                  \
 175        extern void *__crc_##sym __attribute__((weak));         \
 176        static const unsigned long __kcrctab_##sym              \
 177        __attribute_used__                                      \
 178        __attribute__((section("__kcrctab" sec), unused))       \
 179        = (unsigned long) &__crc_##sym;
 180#else
 181#define __CRC_SYMBOL(sym, sec)
 182#endif
 183
 184/* For every exported symbol, place a struct in the __ksymtab section */
 185#define __EXPORT_SYMBOL(sym, sec)                               \
 186        extern typeof(sym) sym;                                 \
 187        __CRC_SYMBOL(sym, sec)                                  \
 188        static const char __kstrtab_##sym[]                     \
 189        __attribute__((section("__ksymtab_strings")))           \
 190        = MODULE_SYMBOL_PREFIX #sym;                            \
 191        static const struct kernel_symbol __ksymtab_##sym       \
 192        __attribute_used__                                      \
 193        __attribute__((section("__ksymtab" sec), unused))       \
 194        = { (unsigned long)&sym, __kstrtab_##sym }
 195
 196#define EXPORT_SYMBOL(sym)                                      \
 197        __EXPORT_SYMBOL(sym, "")
 198
 199#define EXPORT_SYMBOL_GPL(sym)                                  \
 200        __EXPORT_SYMBOL(sym, "_gpl")
 201
 202#define EXPORT_SYMBOL_GPL_FUTURE(sym)                           \
 203        __EXPORT_SYMBOL(sym, "_gpl_future")
 204
 205#endif
 206
 207struct module_ref
 208{
 209        local_t count;
 210} ____cacheline_aligned;
 211
 212enum module_state
 213{
 214        MODULE_STATE_LIVE,
 215        MODULE_STATE_COMING,
 216        MODULE_STATE_GOING,
 217};
 218
 219/* Similar stuff for section attributes. */
 220#define MODULE_SECT_NAME_LEN 32
 221struct module_sect_attr
 222{
 223        struct module_attribute mattr;
 224        char name[MODULE_SECT_NAME_LEN];
 225        unsigned long address;
 226};
 227
 228struct module_sect_attrs
 229{
 230        struct attribute_group grp;
 231        struct module_sect_attr attrs[0];
 232};
 233
 234struct module_param_attrs;
 235
 236struct module
 237{
 238        enum module_state state;
 239
 240        /* Member of list of modules */
 241        struct list_head list;
 242
 243        /* Unique handle for this module */
 244        char name[MODULE_NAME_LEN];
 245
 246        /* Sysfs stuff. */
 247        struct module_kobject mkobj;
 248        struct module_param_attrs *param_attrs;
 249        struct module_attribute *modinfo_attrs;
 250        const char *version;
 251        const char *srcversion;
 252
 253        /* Exported symbols */
 254        const struct kernel_symbol *syms;
 255        unsigned int num_syms;
 256        const unsigned long *crcs;
 257
 258        /* GPL-only exported symbols. */
 259        const struct kernel_symbol *gpl_syms;
 260        unsigned int num_gpl_syms;
 261        const unsigned long *gpl_crcs;
 262
 263        /* symbols that will be GPL-only in the near future. */
 264        const struct kernel_symbol *gpl_future_syms;
 265        unsigned int num_gpl_future_syms;
 266        const unsigned long *gpl_future_crcs;
 267
 268        /* Exception table */
 269        unsigned int num_exentries;
 270        const struct exception_table_entry *extable;
 271
 272        /* Startup function. */
 273        int (*init)(void);
 274
 275        /* If this is non-NULL, vfree after init() returns */
 276        void *module_init;
 277
 278        /* Here is the actual code + data, vfree'd on unload. */
 279        void *module_core;
 280
 281        /* Here are the sizes of the init and core sections */
 282        unsigned long init_size, core_size;
 283
 284        /* The size of the executable code in each section.  */
 285        unsigned long init_text_size, core_text_size;
 286
 287        /* Arch-specific module values */
 288        struct mod_arch_specific arch;
 289
 290        /* Am I unsafe to unload? */
 291        int unsafe;
 292
 293        /* Am I GPL-compatible */
 294        int license_gplok;
 295
 296#ifdef CONFIG_MODULE_UNLOAD
 297        /* Reference counts */
 298        struct module_ref ref[NR_CPUS];
 299
 300        /* What modules depend on me? */
 301        struct list_head modules_which_use_me;
 302
 303        /* Who is waiting for us to be unloaded */
 304        struct task_struct *waiter;
 305
 306        /* Destruction function. */
 307        void (*exit)(void);
 308#endif
 309
 310#ifdef CONFIG_KALLSYMS
 311        /* We keep the symbol and string tables for kallsyms. */
 312        Elf_Sym *symtab;
 313        unsigned long num_symtab;
 314        char *strtab;
 315
 316        /* Section attributes */
 317        struct module_sect_attrs *sect_attrs;
 318#endif
 319
 320        /* Per-cpu data. */
 321        void *percpu;
 322
 323        /* The command line arguments (may be mangled).  People like
 324           keeping pointers to this stuff */
 325        char *args;
 326};
 327
 328/* FIXME: It'd be nice to isolate modules during init, too, so they
 329   aren't used before they (may) fail.  But presently too much code
 330   (IDE & SCSI) require entry into the module during init.*/
 331static inline int module_is_live(struct module *mod)
 332{
 333        return mod->state != MODULE_STATE_GOING;
 334}
 335
 336/* Is this address in a module? (second is with no locks, for oops) */
 337struct module *module_text_address(unsigned long addr);
 338struct module *__module_text_address(unsigned long addr);
 339
 340/* Returns module and fills in value, defined and namebuf, or NULL if
 341   symnum out of range. */
 342struct module *module_get_kallsym(unsigned int symnum,
 343                                  unsigned long *value,
 344                                  char *type,
 345                                  char namebuf[128]);
 346
 347/* Look for this name: can be of form module:name. */
 348unsigned long module_kallsyms_lookup_name(const char *name);
 349
 350int is_exported(const char *name, const struct module *mod);
 351
 352extern void __module_put_and_exit(struct module *mod, long code)
 353        __attribute__((noreturn));
 354#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code);
 355
 356#ifdef CONFIG_MODULE_UNLOAD
 357unsigned int module_refcount(struct module *mod);
 358void __symbol_put(const char *symbol);
 359#define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x)
 360void symbol_put_addr(void *addr);
 361
 362/* Sometimes we know we already have a refcount, and it's easier not
 363   to handle the error case (which only happens with rmmod --wait). */
 364static inline void __module_get(struct module *module)
 365{
 366        if (module) {
 367                BUG_ON(module_refcount(module) == 0);
 368                local_inc(&module->ref[get_cpu()].count);
 369                put_cpu();
 370        }
 371}
 372
 373static inline int try_module_get(struct module *module)
 374{
 375        int ret = 1;
 376
 377        if (module) {
 378                unsigned int cpu = get_cpu();
 379                if (likely(module_is_live(module)))
 380                        local_inc(&module->ref[cpu].count);
 381                else
 382                        ret = 0;
 383                put_cpu();
 384        }
 385        return ret;
 386}
 387
 388static inline void module_put(struct module *module)
 389{
 390        if (module) {
 391                unsigned int cpu = get_cpu();
 392                local_dec(&module->ref[cpu].count);
 393                /* Maybe they're waiting for us to drop reference? */
 394                if (unlikely(!module_is_live(module)))
 395                        wake_up_process(module->waiter);
 396                put_cpu();
 397        }
 398}
 399
 400#else /*!CONFIG_MODULE_UNLOAD*/
 401static inline int try_module_get(struct module *module)
 402{
 403        return !module || module_is_live(module);
 404}
 405static inline void module_put(struct module *module)
 406{
 407}
 408static inline void __module_get(struct module *module)
 409{
 410}
 411#define symbol_put(x) do { } while(0)
 412#define symbol_put_addr(p) do { } while(0)
 413
 414#endif /* CONFIG_MODULE_UNLOAD */
 415
 416/* This is a #define so the string doesn't get put in every .o file */
 417#define module_name(mod)                        \
 418({                                              \
 419        struct module *__mod = (mod);           \
 420        __mod ? __mod->name : "kernel";         \
 421})
 422
 423#define __unsafe(mod)                                                        \
 424do {                                                                         \
 425        if (mod && !(mod)->unsafe) {                                         \
 426                printk(KERN_WARNING                                          \
 427                       "Module %s cannot be unloaded due to unsafe usage in" \
 428                       " %s:%u\n", (mod)->name, __FILE__, __LINE__);         \
 429                (mod)->unsafe = 1;                                           \
 430        }                                                                    \
 431} while(0)
 432
 433/* For kallsyms to ask for address resolution.  NULL means not found. */
 434const char *module_address_lookup(unsigned long addr,
 435                                  unsigned long *symbolsize,
 436                                  unsigned long *offset,
 437                                  char **modname);
 438
 439/* For extable.c to search modules' exception tables. */
 440const struct exception_table_entry *search_module_extables(unsigned long addr);
 441
 442int register_module_notifier(struct notifier_block * nb);
 443int unregister_module_notifier(struct notifier_block * nb);
 444
 445extern void print_modules(void);
 446
 447struct device_driver;
 448void module_add_driver(struct module *, struct device_driver *);
 449void module_remove_driver(struct device_driver *);
 450
 451#else /* !CONFIG_MODULES... */
 452#define EXPORT_SYMBOL(sym)
 453#define EXPORT_SYMBOL_GPL(sym)
 454#define EXPORT_SYMBOL_GPL_FUTURE(sym)
 455
 456/* Given an address, look for it in the exception tables. */
 457static inline const struct exception_table_entry *
 458search_module_extables(unsigned long addr)
 459{
 460        return NULL;
 461}
 462
 463/* Is this address in a module? */
 464static inline struct module *module_text_address(unsigned long addr)
 465{
 466        return NULL;
 467}
 468
 469/* Is this address in a module? (don't take a lock, we're oopsing) */
 470static inline struct module *__module_text_address(unsigned long addr)
 471{
 472        return NULL;
 473}
 474
 475/* Get/put a kernel symbol (calls should be symmetric) */
 476#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); })
 477#define symbol_put(x) do { } while(0)
 478#define symbol_put_addr(x) do { } while(0)
 479
 480static inline void __module_get(struct module *module)
 481{
 482}
 483
 484static inline int try_module_get(struct module *module)
 485{
 486        return 1;
 487}
 488
 489static inline void module_put(struct module *module)
 490{
 491}
 492
 493#define module_name(mod) "kernel"
 494
 495#define __unsafe(mod)
 496
 497/* For kallsyms to ask for address resolution.  NULL means not found. */
 498static inline const char *module_address_lookup(unsigned long addr,
 499                                                unsigned long *symbolsize,
 500                                                unsigned long *offset,
 501                                                char **modname)
 502{
 503        return NULL;
 504}
 505
 506static inline struct module *module_get_kallsym(unsigned int symnum,
 507                                                unsigned long *value,
 508                                                char *type,
 509                                                char namebuf[128])
 510{
 511        return NULL;
 512}
 513
 514static inline unsigned long module_kallsyms_lookup_name(const char *name)
 515{
 516        return 0;
 517}
 518
 519static inline int is_exported(const char *name, const struct module *mod)
 520{
 521        return 0;
 522}
 523
 524static inline int register_module_notifier(struct notifier_block * nb)
 525{
 526        /* no events will happen anyway, so this can always succeed */
 527        return 0;
 528}
 529
 530static inline int unregister_module_notifier(struct notifier_block * nb)
 531{
 532        return 0;
 533}
 534
 535#define module_put_and_exit(code) do_exit(code)
 536
 537static inline void print_modules(void)
 538{
 539}
 540
 541struct device_driver;
 542struct module;
 543
 544static inline void module_add_driver(struct module *module, struct device_driver *driver)
 545{
 546}
 547
 548static inline void module_remove_driver(struct device_driver *driver)
 549{
 550}
 551
 552#endif /* CONFIG_MODULES */
 553
 554#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
 555
 556/* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
 557
 558#define __MODULE_STRING(x) __stringify(x)
 559
 560/* Use symbol_get and symbol_put instead.  You'll thank me. */
 561#define HAVE_INTER_MODULE
 562extern void __deprecated inter_module_register(const char *,
 563                struct module *, const void *);
 564extern void __deprecated inter_module_unregister(const char *);
 565extern const void * __deprecated inter_module_get_request(const char *,
 566                const char *);
 567extern void __deprecated inter_module_put(const char *);
 568
 569#endif /* _LINUX_MODULE_H */
 570
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.