modutils: merge module_entry and module_info to common
This merges the in-memory module info structures of modprobe and depmod. This allows sharing hashing by modulename code improving depmod runtime with almost factor of 2x. function old new delta get_or_add_modentry - 17 +17 do_modprobe 590 601 +11 moddb_get_or_create - 10 +10 load_modules_dep 195 205 +10 moddb_get - 7 +7 add_probe 81 78 -3 modprobe_main 721 714 -7 depmod_main 553 543 -10 config_file_action 434 421 -13 helper_get_module 160 144 -16 parse_module 343 320 -23 order_dep_list 105 82 -23 ------------------------------------------------------------------------------ (add/remove: 3/0 grow/shrink: 2/7 up/down: 55/-95) Total: -40 bytes Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
34adecc2b0
commit
48dc80bbba
4 changed files with 113 additions and 120 deletions
|
@ -16,6 +16,36 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
|
|||
/* linux/include/linux/module.h has 64, but this is also used
|
||||
* internally for the maximum alias name length, which can be quite long */
|
||||
#define MODULE_NAME_LEN 256
|
||||
#define MODULE_HASH_SIZE 256
|
||||
|
||||
typedef struct module_entry {
|
||||
struct module_entry *next;
|
||||
char *name, *modname;
|
||||
llist_t *deps;
|
||||
IF_MODPROBE(
|
||||
llist_t *realnames;
|
||||
unsigned flags;
|
||||
const char *probed_name; /* verbatim as seen on cmdline */
|
||||
char *options; /* options from config files */
|
||||
)
|
||||
IF_DEPMOD(
|
||||
llist_t *aliases;
|
||||
llist_t *symbols;
|
||||
struct module_entry *dnext, *dprev;
|
||||
)
|
||||
} module_entry;
|
||||
|
||||
typedef struct module_db {
|
||||
module_entry *buckets[MODULE_HASH_SIZE];
|
||||
} module_db;
|
||||
|
||||
#define moddb_foreach_module(db, module, index) \
|
||||
for ((index) = 0; (index) < MODULE_HASH_SIZE; (index)++) \
|
||||
for (module = (db)->buckets[index]; module; module = module->next)
|
||||
|
||||
module_entry *moddb_get(module_db *db, const char *s) FAST_FUNC;
|
||||
module_entry *moddb_get_or_create(module_db *db, const char *s) FAST_FUNC;
|
||||
void moddb_free(module_db *db) FAST_FUNC;
|
||||
|
||||
void replace(char *s, char what, char with) FAST_FUNC;
|
||||
char *replace_underscores(char *s) FAST_FUNC;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue