--- /dev/null
+From 75757507e014fa074d25d2883c4ab604999584bd Mon Sep 17 00:00:00 2001
+From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Date: Fri, 4 Dec 2009 10:24:19 -0800
+Subject: DMI: allow omitting ident strings in DMI tables
+
+From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+
+commit 75757507e014fa074d25d2883c4ab604999584bd upstream.
+
+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.
+
+[needed for DMI table changes that need to be done by later patches - gkh]
+
+Acked-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firmware/dmi_scan.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+--- a/drivers/firmware/dmi_scan.c
++++ b/drivers/firmware/dmi_scan.c
+@@ -429,7 +429,7 @@ static bool dmi_matches(const struct 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;
+@@ -440,6 +440,15 @@ static bool dmi_matches(const struct dmi
+ }
+
+ /**
++ * 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
+ * All non-null elements of the list must match
+@@ -457,7 +466,7 @@ int dmi_check_system(const struct dmi_sy
+ 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_ma
+ {
+ 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;
+