Skip to content

Commit d92b7a3

Browse files
committed
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 <[email protected]>
1 parent f4fdb17 commit d92b7a3

File tree

1 file changed

+15
-33
lines changed

1 file changed

+15
-33
lines changed

scripts/mod/file2alias.c

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static void __attribute__((format (printf, 3, 4)))
4848
module_alias_printf(struct module *mod, bool append_wildcard,
4949
const char *fmt, ...)
5050
{
51-
struct module_alias *new;
51+
struct module_alias *new, *als;
5252
size_t len;
5353
int n;
5454
va_list ap;
@@ -86,6 +86,14 @@ module_alias_printf(struct module *mod, bool append_wildcard,
8686
new->str[n + 1] = '\0';
8787
}
8888

89+
/* avoid duplication */
90+
list_for_each_entry(als, &mod->aliases, node) {
91+
if (!strcmp(als->str, new->str)) {
92+
free(new);
93+
return;
94+
}
95+
}
96+
8997
list_add_tail(&new->node, &mod->aliases);
9098
}
9199

@@ -687,44 +695,18 @@ static void do_pnp_card_entries(void *symval, unsigned long size,
687695

688696
for (j = 0; j < PNP_MAX_DEVICES; j++) {
689697
const char *id = (char *)(*devs)[j].id;
690-
int i2, j2;
691-
int dup = 0;
698+
char acpi_id[PNP_ID_LEN];
692699

693700
if (!id[0])
694701
break;
695702

696-
/* find duplicate, already added value */
697-
for (i2 = 0; i2 < i && !dup; i2++) {
698-
DEF_FIELD_ADDR_VAR(symval + i2 * id_size,
699-
pnp_card_device_id,
700-
devs, devs_dup);
701-
702-
for (j2 = 0; j2 < PNP_MAX_DEVICES; j2++) {
703-
const char *id2 =
704-
(char *)(*devs_dup)[j2].id;
705-
706-
if (!id2[0])
707-
break;
708-
709-
if (!strcmp(id, id2)) {
710-
dup = 1;
711-
break;
712-
}
713-
}
714-
}
715-
716703
/* add an individual alias for every device entry */
717-
if (!dup) {
718-
char acpi_id[PNP_ID_LEN];
719-
int k;
704+
module_alias_printf(mod, false, "pnp:d%s*", id);
720705

721-
module_alias_printf(mod, false, "pnp:d%s*", id);
722-
723-
/* fix broken pnp bus lowercasing */
724-
for (k = 0; k < sizeof(acpi_id); k++)
725-
acpi_id[k] = toupper(id[k]);
726-
module_alias_printf(mod, false, "acpi*:%s:*", acpi_id);
727-
}
706+
/* fix broken pnp bus lowercasing */
707+
for (int k = 0; k < sizeof(acpi_id); k++)
708+
acpi_id[k] = toupper(id[k]);
709+
module_alias_printf(mod, false, "acpi*:%s:*", acpi_id);
728710
}
729711
}
730712
}

0 commit comments

Comments
 (0)