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

Commit 7117794f authored by Jean Delvare's avatar Jean Delvare
Browse files

firmware: dmi_scan: Drop dmi_initialized



I don't think it makes sense to check for a possible bad
initialization order at run time on every system when it is all
decided at build time.

A more efficient way to make sure developers do not introduce new
calls to dmi_check_system() too early in the initialization sequence
is to simply document the expected call order. That way, developers
have a chance to get it right immediately, without having to
test-boot their kernel, wonder why it does not work, and parse the
kernel logs for a warning message. And we get rid of the run-time
performance penalty as a nice side effect.

Signed-off-by: default avatarJean Delvare <jdelvare@suse.de>
Cc: Ingo Molnar <mingo@kernel.org>
parent 8cf4e6a0
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -26,11 +26,6 @@ static u16 dmi_num;
static u8 smbios_entry_point[32];
static int smbios_entry_point_size;

/*
 * Catch too early calls to dmi_check_system():
 */
static int dmi_initialized;

/* DMI system identification string used during boot */
static char dmi_ids_string[128] __initdata;

@@ -633,7 +628,7 @@ void __init dmi_scan_machine(void)

			if (!dmi_smbios3_present(buf)) {
				dmi_available = 1;
				goto out;
				return;
			}
		}
		if (efi.smbios == EFI_INVALID_TABLE_ADDR)
@@ -651,7 +646,7 @@ void __init dmi_scan_machine(void)

		if (!dmi_present(buf)) {
			dmi_available = 1;
			goto out;
			return;
		}
	} else if (IS_ENABLED(CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK)) {
		p = dmi_early_remap(0xF0000, 0x10000);
@@ -668,7 +663,7 @@ void __init dmi_scan_machine(void)
			if (!dmi_smbios3_present(buf)) {
				dmi_available = 1;
				dmi_early_unmap(p, 0x10000);
				goto out;
				return;
			}
			memcpy(buf, buf + 16, 16);
		}
@@ -686,7 +681,7 @@ void __init dmi_scan_machine(void)
			if (!dmi_present(buf)) {
				dmi_available = 1;
				dmi_early_unmap(p, 0x10000);
				goto out;
				return;
			}
			memcpy(buf, buf + 16, 16);
		}
@@ -694,8 +689,6 @@ void __init dmi_scan_machine(void)
	}
 error:
	pr_info("DMI not present or invalid.\n");
 out:
	dmi_initialized = 1;
}

static ssize_t raw_table_read(struct file *file, struct kobject *kobj,
@@ -827,14 +820,14 @@ static bool dmi_is_end_of_table(const struct dmi_system_id *dmi)
 *	Walk the blacklist table running matching functions until someone
 *	returns non zero or we hit the end. Callback function is called for
 *	each successful match. Returns the number of matches.
 *
 *	dmi_scan_machine must be called before this function is called.
 */
int dmi_check_system(const struct dmi_system_id *list)
{
	int count = 0;
	const struct dmi_system_id *d;

	WARN(!dmi_initialized, KERN_ERR "dmi check: not initialized yet.\n");

	for (d = list; !dmi_is_end_of_table(d); d++)
		if (dmi_matches(d)) {
			count++;
@@ -857,6 +850,8 @@ EXPORT_SYMBOL(dmi_check_system);
 *
 *	Walk the blacklist table until the first match is found.  Return the
 *	pointer to the matching entry or NULL if there's no match.
 *
 *	dmi_scan_machine must be called before this function is called.
 */
const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list)
{