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

Commit 75757507 authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

DMI: allow omitting ident strings in DMI tables



The purpose of dmi->ident is twofold - it may be used by DMI callback
functions when composing log messages; it is also used to determine
end of DMI table in dmi_check_system() and dmi_first_match(). However,
in case when callbacks are not interested in using ident at all it just
wastes memory. Let's make entries with empty first match slot serve as
end-of-table markers instead.

Acked-by: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 7705d548
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -429,7 +429,7 @@ static bool dmi_matches(const struct dmi_system_id *dmi)
	for (i = 0; i < ARRAY_SIZE(dmi->matches); i++) {
		int s = dmi->matches[i].slot;
		if (s == DMI_NONE)
			continue;
			break;
		if (dmi_ident[s]
		    && strstr(dmi_ident[s], dmi->matches[i].substr))
			continue;
@@ -439,6 +439,15 @@ static bool dmi_matches(const struct dmi_system_id *dmi)
	return true;
}

/**
 *	dmi_is_end_of_table - check for end-of-table marker
 *	@dmi: pointer to the dmi_system_id structure to check
 */
static bool dmi_is_end_of_table(const struct dmi_system_id *dmi)
{
	return dmi->matches[0].slot == DMI_NONE;
}

/**
 *	dmi_check_system - check system DMI data
 *	@list: array of dmi_system_id structures to match against
@@ -457,7 +466,7 @@ int dmi_check_system(const struct dmi_system_id *list)
	int count = 0;
	const struct dmi_system_id *d;

	for (d = list; d->ident; d++)
	for (d = list; !dmi_is_end_of_table(d); d++)
		if (dmi_matches(d)) {
			count++;
			if (d->callback && d->callback(d))
@@ -484,7 +493,7 @@ const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list)
{
	const struct dmi_system_id *d;

	for (d = list; d->ident; d++)
	for (d = list; !dmi_is_end_of_table(d); d++)
		if (dmi_matches(d))
			return d;