mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-07 08:20:49 +00:00
modpost: deduplicate MODULE_ALIAS() for all drivers
MODULE_DEVICE_TABLE(pnp_card, ...) may have duplicated IDs. For
instance, snd_ad1816a_pnpids[] in sound/isa/ad1816a/ad1816a.c includes
multiple occurrences of the "ADS7180" string within its .devs fields.
Currently, do_pnp_card_entries() handles deduplication on its own, but
this logic should be moved to a common helper function, as drivers in
other subsystems might also have similar duplication issues.
For example, drivers/media/i2c/s5c73m3/s5c73m3.mod.c contains duplicated
MODULE_ALIAS() entries because both s5c73m3-core.c and s5c73m3-spi.c
define the same compatible string.
This commit eliminates redundant MODULE_ALIAS() entries across all
drivers.
[Before]
$ grep MODULE_ALIAS drivers/media/i2c/s5c73m3/s5c73m3.mod.c
MODULE_ALIAS("i2c:S5C73M3");
MODULE_ALIAS("of:N*T*Csamsung,s5c73m3");
MODULE_ALIAS("of:N*T*Csamsung,s5c73m3C*");
MODULE_ALIAS("of:N*T*Csamsung,s5c73m3");
MODULE_ALIAS("of:N*T*Csamsung,s5c73m3C*");
[After]
$ grep MODULE_ALIAS drivers/media/i2c/s5c73m3/s5c73m3.mod.c
MODULE_ALIAS("i2c:S5C73M3");
MODULE_ALIAS("of:N*T*Csamsung,s5c73m3");
MODULE_ALIAS("of:N*T*Csamsung,s5c73m3C*");
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
f4fdb17ca5
commit
d92b7a3b52
@ -48,7 +48,7 @@ static void __attribute__((format (printf, 3, 4)))
|
|||||||
module_alias_printf(struct module *mod, bool append_wildcard,
|
module_alias_printf(struct module *mod, bool append_wildcard,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
struct module_alias *new;
|
struct module_alias *new, *als;
|
||||||
size_t len;
|
size_t len;
|
||||||
int n;
|
int n;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -86,6 +86,14 @@ module_alias_printf(struct module *mod, bool append_wildcard,
|
|||||||
new->str[n + 1] = '\0';
|
new->str[n + 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* avoid duplication */
|
||||||
|
list_for_each_entry(als, &mod->aliases, node) {
|
||||||
|
if (!strcmp(als->str, new->str)) {
|
||||||
|
free(new);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
list_add_tail(&new->node, &mod->aliases);
|
list_add_tail(&new->node, &mod->aliases);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -687,44 +695,18 @@ static void do_pnp_card_entries(void *symval, unsigned long size,
|
|||||||
|
|
||||||
for (j = 0; j < PNP_MAX_DEVICES; j++) {
|
for (j = 0; j < PNP_MAX_DEVICES; j++) {
|
||||||
const char *id = (char *)(*devs)[j].id;
|
const char *id = (char *)(*devs)[j].id;
|
||||||
int i2, j2;
|
char acpi_id[PNP_ID_LEN];
|
||||||
int dup = 0;
|
|
||||||
|
|
||||||
if (!id[0])
|
if (!id[0])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* find duplicate, already added value */
|
|
||||||
for (i2 = 0; i2 < i && !dup; i2++) {
|
|
||||||
DEF_FIELD_ADDR_VAR(symval + i2 * id_size,
|
|
||||||
pnp_card_device_id,
|
|
||||||
devs, devs_dup);
|
|
||||||
|
|
||||||
for (j2 = 0; j2 < PNP_MAX_DEVICES; j2++) {
|
|
||||||
const char *id2 =
|
|
||||||
(char *)(*devs_dup)[j2].id;
|
|
||||||
|
|
||||||
if (!id2[0])
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (!strcmp(id, id2)) {
|
|
||||||
dup = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add an individual alias for every device entry */
|
/* add an individual alias for every device entry */
|
||||||
if (!dup) {
|
module_alias_printf(mod, false, "pnp:d%s*", id);
|
||||||
char acpi_id[PNP_ID_LEN];
|
|
||||||
int k;
|
|
||||||
|
|
||||||
module_alias_printf(mod, false, "pnp:d%s*", id);
|
/* fix broken pnp bus lowercasing */
|
||||||
|
for (int k = 0; k < sizeof(acpi_id); k++)
|
||||||
/* fix broken pnp bus lowercasing */
|
acpi_id[k] = toupper(id[k]);
|
||||||
for (k = 0; k < sizeof(acpi_id); k++)
|
module_alias_printf(mod, false, "acpi*:%s:*", acpi_id);
|
||||||
acpi_id[k] = toupper(id[k]);
|
|
||||||
module_alias_printf(mod, false, "acpi*:%s:*", acpi_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user