Magellan Linux

Contents of /trunk/kmod/patches/0001-kmod-module-lookup-search-module.builtin-file-too.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1659 - (show annotations) (download)
Mon Feb 20 13:50:36 2012 UTC (12 years, 2 months ago) by niro
File size: 7132 byte(s)
-add upstream patch to search modules.builtin too
1 From 3805274bf5e1e0acbd072ac7d523db8c8057130c Mon Sep 17 00:00:00 2001
2 From: Lucas De Marchi <lucas.demarchi@profusion.mobi>
3 Date: Thu, 16 Feb 2012 20:43:16 -0200
4 Subject: [PATCH] kmod-module: lookup: search modules.builtin file too
5
6 Search modules.builtin file before saying the module was not found.
7 Note: these "modules" should not appear as dependencies of other modules
8 (in modules.dep) even if they appear in modinfo. This fixes the return
9 code of modprobe with builtin modules.
10
11 Also fixes a small coding style issue in module_is_inkernel().
12 ---
13 TODO | 3 ---
14 libkmod/libkmod-module.c | 24 ++++++++++++++++++++++--
15 libkmod/libkmod-private.h | 2 ++
16 libkmod/libkmod.c | 21 ++++++++++++++++++++-
17 libkmod/libkmod.h | 1 +
18 testsuite/test-modprobe.c | 1 -
19 6 files changed, 45 insertions(+), 7 deletions(-)
20
21 diff --git a/TODO b/TODO
22 index 315878e..4aa6f7a 100644
23 --- a/TODO
24 +++ b/TODO
25 @@ -49,9 +49,6 @@ Features:
26 * add quirk so we don't calculate dependencies for modules already loaded -
27 that shall fix the bug of vboxdrv and alsa above
28
29 -* search /lib/modules/$(uname -r)/modules.builtin.bin before returning error
30 - that module was not found
31 -
32 Known Bugs:
33 ===========
34
35 diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
36 index 835896f..4226bbb 100644
37 --- a/libkmod/libkmod-module.c
38 +++ b/libkmod/libkmod-module.c
39 @@ -80,6 +80,13 @@ struct kmod_module {
40 * whether the module's command and softdep should be ignored
41 */
42 bool ignorecmd : 1;
43 +
44 + /*
45 + * if module was created by searching the modules.builtin file, this
46 + * is set. There's nothing much useful one can do with such a
47 + * "module", except knowing it's builtin.
48 + */
49 + bool builtin : 1;
50 };
51
52 static inline const char *path_join(const char *path, size_t prefixlen,
53 @@ -101,12 +108,13 @@ static inline const char *path_join(const char *path, size_t prefixlen,
54 static inline bool module_is_inkernel(struct kmod_module *mod)
55 {
56 int state = kmod_module_get_initstate(mod);
57 +
58 if (state == KMOD_MODULE_LIVE ||
59 state == KMOD_MODULE_COMING ||
60 state == KMOD_MODULE_BUILTIN)
61 return true;
62 - else
63 - return false;
64 +
65 + return false;
66 }
67
68 int kmod_module_parse_depline(struct kmod_module *mod, char *line)
69 @@ -191,6 +199,11 @@ void kmod_module_set_visited(struct kmod_module *mod, bool visited)
70 mod->visited = visited;
71 }
72
73 +void kmod_module_set_builtin(struct kmod_module *mod, bool builtin)
74 +{
75 + mod->builtin = builtin;
76 +}
77 +
78 /*
79 * Memory layout with alias:
80 *
81 @@ -526,6 +539,10 @@ KMOD_EXPORT int kmod_module_new_from_lookup(struct kmod_ctx *ctx,
82 err = kmod_lookup_alias_from_aliases_file(ctx, alias, list);
83 CHECK_ERR_AND_FINISH(err, fail, list, finish);
84
85 + DBG(ctx, "lookup modules.builtin %s\n", alias);
86 + err = kmod_lookup_alias_from_builtin_file(ctx, alias, list);
87 + CHECK_ERR_AND_FINISH(err, fail, list, finish);
88 +
89 finish:
90 DBG(ctx, "lookup %s=%d, list=%p\n", alias, err, *list);
91 return err;
92 @@ -1593,6 +1610,9 @@ KMOD_EXPORT int kmod_module_get_initstate(const struct kmod_module *mod)
93 if (mod == NULL)
94 return -ENOENT;
95
96 + if (mod->builtin)
97 + return KMOD_MODULE_BUILTIN;
98 +
99 pathlen = snprintf(path, sizeof(path),
100 "/sys/module/%s/initstate", mod->name);
101 fd = open(path, O_RDONLY|O_CLOEXEC);
102 diff --git a/libkmod/libkmod-private.h b/libkmod/libkmod-private.h
103 index 0ee37d4..ebda945 100644
104 --- a/libkmod/libkmod-private.h
105 +++ b/libkmod/libkmod-private.h
106 @@ -81,6 +81,7 @@ int kmod_lookup_alias_from_config(struct kmod_ctx *ctx, const char *name, struct
107 int kmod_lookup_alias_from_symbols_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
108 int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
109 int kmod_lookup_alias_from_moddep_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
110 +int kmod_lookup_alias_from_builtin_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
111 int kmod_lookup_alias_from_commands(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3)));
112 void kmod_set_modules_visited(struct kmod_ctx *ctx, bool visited) __attribute__((nonnull((1))));
113
114 @@ -137,6 +138,7 @@ int kmod_module_parse_depline(struct kmod_module *mod, char *line) __attribute__
115 void kmod_module_set_install_commands(struct kmod_module *mod, const char *cmd) __attribute__((nonnull(1)));
116 void kmod_module_set_remove_commands(struct kmod_module *mod, const char *cmd) __attribute__((nonnull(1)));
117 void kmod_module_set_visited(struct kmod_module *mod, bool visited) __attribute__((nonnull(1)));
118 +void kmod_module_set_builtin(struct kmod_module *mod, bool builtin) __attribute__((nonnull((1))));
119
120 /* libkmod-hash.c */
121
122 diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c
123 index 4990d3e..36af201 100644
124 --- a/libkmod/libkmod.c
125 +++ b/libkmod/libkmod.c
126 @@ -37,7 +37,7 @@
127
128 #define KMOD_HASH_SIZE (256)
129 #define KMOD_LRU_MAX (128)
130 -#define _KMOD_INDEX_MODULES_SIZE KMOD_INDEX_MODULES_SYMBOL + 1
131 +#define _KMOD_INDEX_MODULES_SIZE KMOD_INDEX_MODULES_BUILTIN + 1
132
133 /**
134 * SECTION:libkmod
135 @@ -54,6 +54,7 @@ static struct _index_files {
136 [KMOD_INDEX_MODULES_DEP] = { .fn = "modules.dep", .prefix = "" },
137 [KMOD_INDEX_MODULES_ALIAS] = { .fn = "modules.alias", .prefix = "alias " },
138 [KMOD_INDEX_MODULES_SYMBOL] = { .fn = "modules.symbols", .prefix = "alias "},
139 + [KMOD_INDEX_MODULES_BUILTIN] = { .fn = "modules.builtin", .prefix = ""},
140 };
141
142 static const char *default_config_paths[] = {
143 @@ -476,6 +477,24 @@ int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name,
144 name, list);
145 }
146
147 +int kmod_lookup_alias_from_builtin_file(struct kmod_ctx *ctx, const char *name,
148 + struct kmod_list **list)
149 +{
150 + const struct kmod_list *l;
151 +
152 + int err = kmod_lookup_alias_from_alias_bin(ctx,
153 + KMOD_INDEX_MODULES_BUILTIN, name, list);
154 + if (err < 0)
155 + return err;
156 +
157 + kmod_list_foreach(l, *list) {
158 + struct kmod_module *m = l->data;
159 + kmod_module_set_builtin(m, true);
160 + }
161 +
162 + return err;
163 +}
164 +
165 char *kmod_search_moddep(struct kmod_ctx *ctx, const char *name)
166 {
167 struct index_file *idx;
168 diff --git a/libkmod/libkmod.h b/libkmod/libkmod.h
169 index 6992e77..424640a 100644
170 --- a/libkmod/libkmod.h
171 +++ b/libkmod/libkmod.h
172 @@ -69,6 +69,7 @@ enum kmod_index {
173 KMOD_INDEX_MODULES_DEP = 0,
174 KMOD_INDEX_MODULES_ALIAS,
175 KMOD_INDEX_MODULES_SYMBOL,
176 + KMOD_INDEX_MODULES_BUILTIN,
177 /* Padding to make sure enum is not mapped to char */
178 _KMOD_INDEX_PAD = (1 << 31),
179 };
180 diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
181 index 0022c06..3aebcae 100644
182 --- a/testsuite/test-modprobe.c
183 +++ b/testsuite/test-modprobe.c
184 @@ -83,7 +83,6 @@ static __noreturn int modprobe_builtin(const struct test *t)
185 }
186 static DEFINE_TEST(modprobe_builtin,
187 .description = "check if modprobe return 0 for builtin",
188 - .expected_fail = true,
189 .config = {
190 [TC_UNAME_R] = "4.4.4",
191 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/builtin",
192 --
193 1.7.6.5
194