Commit 75757507 authored by Dmitry Torokhov's avatar Dmitry Torokhov

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
...@@ -429,7 +429,7 @@ static bool dmi_matches(const struct dmi_system_id *dmi) ...@@ -429,7 +429,7 @@ static bool dmi_matches(const struct dmi_system_id *dmi)
for (i = 0; i < ARRAY_SIZE(dmi->matches); i++) { for (i = 0; i < ARRAY_SIZE(dmi->matches); i++) {
int s = dmi->matches[i].slot; int s = dmi->matches[i].slot;
if (s == DMI_NONE) if (s == DMI_NONE)
continue; break;
if (dmi_ident[s] if (dmi_ident[s]
&& strstr(dmi_ident[s], dmi->matches[i].substr)) && strstr(dmi_ident[s], dmi->matches[i].substr))
continue; continue;
...@@ -439,6 +439,15 @@ static bool dmi_matches(const struct dmi_system_id *dmi) ...@@ -439,6 +439,15 @@ static bool dmi_matches(const struct dmi_system_id *dmi)
return true; 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 * dmi_check_system - check system DMI data
* @list: array of dmi_system_id structures to match against * @list: array of dmi_system_id structures to match against
...@@ -457,7 +466,7 @@ int dmi_check_system(const struct dmi_system_id *list) ...@@ -457,7 +466,7 @@ int dmi_check_system(const struct dmi_system_id *list)
int count = 0; int count = 0;
const struct dmi_system_id *d; 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)) { if (dmi_matches(d)) {
count++; count++;
if (d->callback && d->callback(d)) if (d->callback && d->callback(d))
...@@ -484,7 +493,7 @@ const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list) ...@@ -484,7 +493,7 @@ const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list)
{ {
const struct dmi_system_id *d; 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)) if (dmi_matches(d))
return d; return d;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment