[PATCH] Remove MODULE_PARM

MODULE_PARM was actually breaking: recent gcc version optimize them out as
unused.  It's time to replace the last users, which are generally in the
most unloved drivers anyway.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Rusty Russell
2006-03-25 03:07:05 -08:00
committed by Linus Torvalds
parent c721bccece
commit 8d3b33f67f
56 changed files with 146 additions and 329 deletions

View File

@@ -233,24 +233,6 @@ static unsigned long __find_symbol(const char *name,
return 0;
}
/* Find a symbol in this elf symbol table */
static unsigned long find_local_symbol(Elf_Shdr *sechdrs,
unsigned int symindex,
const char *strtab,
const char *name)
{
unsigned int i;
Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
/* Search (defined) internal symbols first. */
for (i = 1; i < sechdrs[symindex].sh_size/sizeof(*sym); i++) {
if (sym[i].st_shndx != SHN_UNDEF
&& strcmp(name, strtab + sym[i].st_name) == 0)
return sym[i].st_value;
}
return 0;
}
/* Search for module by name: must hold module_mutex. */
static struct module *find_module(const char *name)
{
@@ -785,139 +767,6 @@ static struct module_attribute *modinfo_attrs[] = {
NULL,
};
#ifdef CONFIG_OBSOLETE_MODPARM
/* Bounds checking done below */
static int obsparm_copy_string(const char *val, struct kernel_param *kp)
{
strcpy(kp->arg, val);
return 0;
}
static int set_obsolete(const char *val, struct kernel_param *kp)
{
unsigned int min, max;
unsigned int size, maxsize;
int dummy;
char *endp;
const char *p;
struct obsolete_modparm *obsparm = kp->arg;
if (!val) {
printk(KERN_ERR "Parameter %s needs an argument\n", kp->name);
return -EINVAL;
}
/* type is: [min[-max]]{b,h,i,l,s} */
p = obsparm->type;
min = simple_strtol(p, &endp, 10);
if (endp == obsparm->type)
min = max = 1;
else if (*endp == '-') {
p = endp+1;
max = simple_strtol(p, &endp, 10);
} else
max = min;
switch (*endp) {
case 'b':
return param_array(kp->name, val, min, max, obsparm->addr,
1, param_set_byte, &dummy);
case 'h':
return param_array(kp->name, val, min, max, obsparm->addr,
sizeof(short), param_set_short, &dummy);
case 'i':
return param_array(kp->name, val, min, max, obsparm->addr,
sizeof(int), param_set_int, &dummy);
case 'l':
return param_array(kp->name, val, min, max, obsparm->addr,
sizeof(long), param_set_long, &dummy);
case 's':
return param_array(kp->name, val, min, max, obsparm->addr,
sizeof(char *), param_set_charp, &dummy);
case 'c':
/* Undocumented: 1-5c50 means 1-5 strings of up to 49 chars,
and the decl is "char xxx[5][50];" */
p = endp+1;
maxsize = simple_strtol(p, &endp, 10);
/* We check lengths here (yes, this is a hack). */
p = val;
while (p[size = strcspn(p, ",")]) {
if (size >= maxsize)
goto oversize;
p += size+1;
}
if (size >= maxsize)
goto oversize;
return param_array(kp->name, val, min, max, obsparm->addr,
maxsize, obsparm_copy_string, &dummy);
}
printk(KERN_ERR "Unknown obsolete parameter type %s\n", obsparm->type);
return -EINVAL;
oversize:
printk(KERN_ERR
"Parameter %s doesn't fit in %u chars.\n", kp->name, maxsize);
return -EINVAL;
}
static int obsolete_params(const char *name,
char *args,
struct obsolete_modparm obsparm[],
unsigned int num,
Elf_Shdr *sechdrs,
unsigned int symindex,
const char *strtab)
{
struct kernel_param *kp;
unsigned int i;
int ret;
kp = kmalloc(sizeof(kp[0]) * num, GFP_KERNEL);
if (!kp)
return -ENOMEM;
for (i = 0; i < num; i++) {
char sym_name[128 + sizeof(MODULE_SYMBOL_PREFIX)];
snprintf(sym_name, sizeof(sym_name), "%s%s",
MODULE_SYMBOL_PREFIX, obsparm[i].name);
kp[i].name = obsparm[i].name;
kp[i].perm = 000;
kp[i].set = set_obsolete;
kp[i].get = NULL;
obsparm[i].addr
= (void *)find_local_symbol(sechdrs, symindex, strtab,
sym_name);
if (!obsparm[i].addr) {
printk("%s: falsely claims to have parameter %s\n",
name, obsparm[i].name);
ret = -EINVAL;
goto out;
}
kp[i].arg = &obsparm[i];
}
ret = parse_args(name, args, kp, num, NULL);
out:
kfree(kp);
return ret;
}
#else
static int obsolete_params(const char *name,
char *args,
struct obsolete_modparm obsparm[],
unsigned int num,
Elf_Shdr *sechdrs,
unsigned int symindex,
const char *strtab)
{
if (num != 0)
printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
name);
return 0;
}
#endif /* CONFIG_OBSOLETE_MODPARM */
static const char vermagic[] = VERMAGIC_STRING;
#ifdef CONFIG_MODVERSIONS
@@ -1874,27 +1723,17 @@ static struct module *load_module(void __user *umod,
set_fs(old_fs);
mod->args = args;
if (obsparmindex) {
err = obsolete_params(mod->name, mod->args,
(struct obsolete_modparm *)
sechdrs[obsparmindex].sh_addr,
sechdrs[obsparmindex].sh_size
/ sizeof(struct obsolete_modparm),
sechdrs, symindex,
(char *)sechdrs[strindex].sh_addr);
if (setupindex)
printk(KERN_WARNING "%s: Ignoring new-style "
"parameters in presence of obsolete ones\n",
mod->name);
} else {
/* Size of section 0 is 0, so this works well if no params */
err = parse_args(mod->name, mod->args,
(struct kernel_param *)
sechdrs[setupindex].sh_addr,
sechdrs[setupindex].sh_size
/ sizeof(struct kernel_param),
NULL);
}
if (obsparmindex)
printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
mod->name);
/* Size of section 0 is 0, so this works well if no params */
err = parse_args(mod->name, mod->args,
(struct kernel_param *)
sechdrs[setupindex].sh_addr,
sechdrs[setupindex].sh_size
/ sizeof(struct kernel_param),
NULL);
if (err < 0)
goto arch_cleanup;