diff options
author | Thierry Vignaud <tv@mageia.org> | 2012-12-12 10:12:16 +0000 |
---|---|---|
committer | Thierry Vignaud <tv@mageia.org> | 2012-12-12 10:12:16 +0000 |
commit | ee5d3e43c585a4386ded58d76fac2ef0985d96b5 (patch) | |
tree | a6f59fa82673a7982238405197ec652de498c529 /hid.c | |
parent | 52c9d46227efeb02415c202866d38b4fc458d572 (diff) | |
download | ldetect-ee5d3e43c585a4386ded58d76fac2ef0985d96b5.tar ldetect-ee5d3e43c585a4386ded58d76fac2ef0985d96b5.tar.gz ldetect-ee5d3e43c585a4386ded58d76fac2ef0985d96b5.tar.bz2 ldetect-ee5d3e43c585a4386ded58d76fac2ef0985d96b5.tar.xz ldetect-ee5d3e43c585a4386ded58d76fac2ef0985d96b5.zip |
make ldetect 3x faster (and even faster on machines quite quite a lot
of devices such as servers)
(modalias_init) split it out of modalias_resolve_module()
(modalias_cleanup) move libkmod related cleanups here
(hid_probe,find_modules_through_aliases) only initialize libkmod once
(which reduces user time from 0.26 to 0.08s & elapsed time from 0.28 to
0.9s)
(backported from trunk)
Diffstat (limited to 'hid.c')
-rw-r--r-- | hid.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -4,6 +4,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <libkmod.h> #include "libsysfs.h" #include "libldetect.h" @@ -79,7 +80,7 @@ static void add_entry(struct hid_entries *entry_list, char *name, char *module) } } -static void parse_device(struct hid_entries *entries, const char *dev) +static void parse_device(struct kmod_ctx *ctx, struct hid_entries *entries, const char *dev) { char keyfile[SYSFS_PATH_MAX]; char *modalias; @@ -111,12 +112,11 @@ static void parse_device(struct hid_entries *entries, const char *dev) else device_name = strdup("HID Device"); - modname = modalias_resolve_module(modalias); + modname = modalias_resolve_module(ctx, modalias); free(modalias); DEBUG("%s: module name is [%s]\n", HID_BUS_NAME, modname); if (modname != NULL) add_entry(entries, device_name, modname); - modalias_cleanup(); } @@ -125,6 +125,7 @@ struct hid_entries hid_probe(void) DIR *dir; struct dirent *dent; struct hid_entries entry_list = {NULL, 0}; + struct kmod_ctx *ctx = modalias_init(); dir = opendir(sysfs_hid_path); if (dir == NULL) @@ -134,10 +135,11 @@ struct hid_entries hid_probe(void) if (dent->d_name[0] == '.') continue; DEBUG("%s: device found %s\n", HID_BUS_NAME, dent->d_name); - parse_device(&entry_list, dent->d_name); + parse_device(ctx, &entry_list, dent->d_name); } end_probe: + modalias_cleanup(ctx); if (dir) closedir(dir); |