Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33df0d19 authored by Rusty Russell's avatar Rusty Russell Committed by Andi Kleen
Browse files

[PATCH] Allow early_param and identical __setup to exist



We currently assume that boot parameters which are handled by
early_param() will not overlap boot parameters handled by __setup: if
they do, behaviour is dependent on link order, usually meaning __setup
will not get called.

ACPI wants to use early_param("pci"), and pci uses __setup("pci="), so
we modify the core to let them coexist: "pci=noacpi" will now get
passed to both.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent 9ca33eb6
Loading
Loading
Loading
Loading
+8 −4
Original line number Original line Diff line number Diff line
@@ -162,16 +162,19 @@ extern struct obs_kernel_param __setup_start[], __setup_end[];
static int __init obsolete_checksetup(char *line)
static int __init obsolete_checksetup(char *line)
{
{
	struct obs_kernel_param *p;
	struct obs_kernel_param *p;
	int had_early_param = 0;


	p = __setup_start;
	p = __setup_start;
	do {
	do {
		int n = strlen(p->str);
		int n = strlen(p->str);
		if (!strncmp(line, p->str, n)) {
		if (!strncmp(line, p->str, n)) {
			if (p->early) {
			if (p->early) {
				/* Already done in parse_early_param?  (Needs
				/* Already done in parse_early_param?
				 * exact match on param part) */
				 * (Needs exact match on param part).
				 * Keep iterating, as we can have early
				 * params and __setups of same names 8( */
				if (line[n] == '\0' || line[n] == '=')
				if (line[n] == '\0' || line[n] == '=')
					return 1;
					had_early_param = 1;
			} else if (!p->setup_func) {
			} else if (!p->setup_func) {
				printk(KERN_WARNING "Parameter %s is obsolete,"
				printk(KERN_WARNING "Parameter %s is obsolete,"
				       " ignored\n", p->str);
				       " ignored\n", p->str);
@@ -181,7 +184,8 @@ static int __init obsolete_checksetup(char *line)
		}
		}
		p++;
		p++;
	} while (p < __setup_end);
	} while (p < __setup_end);
	return 0;

	return had_early_param;
}
}


/*
/*