+++ /dev/null
-From: Alok Kataria <akataria@vmware.com>
-Subject: x86: vmware: look for DMI string in the product serial key
-Patch-mainline:
-References: bnc#441338
-
-Impact: Should permit VMware detection on older platforms where the
-vendor is changed. Could theoretically cause a regression if some
-weird serial number scheme contains the string "VMware" by pure
-chance. Seems unlikely, especially with the mixed case.
-
-In some user configured cases, VMware may choose not to put a VMware specific
-DMI string, but the product serial key is always there and is VMware specific.
-Add a interface to check the serial key, when checking for VMware in the DMI
-information.
-
-Signed-off-by: Alok N Kataria <akataria@vmware.com>
-Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-
----
-
- arch/x86/kernel/cpu/vmware.c | 7 ++++++-
- drivers/firmware/dmi_scan.c | 11 +++++++++++
- include/linux/dmi.h | 2 ++
- 3 files changed, 19 insertions(+), 1 deletions(-)
-
-
-diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
-index a0905ec..c034bda 100644
---- a/arch/x86/kernel/cpu/vmware.c
-+++ b/arch/x86/kernel/cpu/vmware.c
-@@ -61,6 +61,11 @@ static unsigned long __vmware_get_tsc_khz(void)
- return tsc_hz;
- }
-
-+/*
-+ * While checking the dmi string infomation, just checking the product
-+ * serial key should be enough, as this will always have a VMware
-+ * specific string when running under VMware hypervisor.
-+ */
- int vmware_platform(void)
- {
- if (cpu_has_hypervisor) {
-@@ -74,7 +79,7 @@ int vmware_platform(void)
- hyper_vendor_id[12] = '\0';
- if (!strcmp(hyper_vendor_id, "VMwareVMware"))
- return 1;
-- } else if (dmi_available && dmi_name_in_vendors("VMware") &&
-+ } else if (dmi_available && dmi_name_in_serial("VMware") &&
- __vmware_platform())
- return 1;
-
-diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
-index 455575b..4dd780c 100644
---- a/drivers/firmware/dmi_scan.c
-+++ b/drivers/firmware/dmi_scan.c
-@@ -457,6 +457,17 @@ const char *dmi_get_system_info(int field)
- }
- EXPORT_SYMBOL(dmi_get_system_info);
-
-+/**
-+ * dmi_name_in_serial - Check if string is in the DMI product serial
-+ * information.
-+ */
-+int dmi_name_in_serial(const char *str)
-+{
-+ int f = DMI_PRODUCT_SERIAL;
-+ if (dmi_ident[f] && strstr(dmi_ident[f], str))
-+ return 1;
-+ return 0;
-+}
-
- /**
- * dmi_name_in_vendors - Check if string is anywhere in the DMI vendor information.
-diff --git a/include/linux/dmi.h b/include/linux/dmi.h
-index 2a063b6..098e292 100644
---- a/include/linux/dmi.h
-+++ b/include/linux/dmi.h
-@@ -81,6 +81,7 @@ extern const struct dmi_device * dmi_find_device(int type, const char *name,
- extern void dmi_scan_machine(void);
- extern int dmi_get_year(int field);
- extern int dmi_name_in_vendors(const char *str);
-+extern int dmi_name_in_serial(const char *str);
- extern int dmi_available;
- extern int dmi_walk(void (*decode)(const struct dmi_header *));
-
-@@ -93,6 +94,7 @@ static inline const struct dmi_device * dmi_find_device(int type, const char *na
- static inline void dmi_scan_machine(void) { return; }
- static inline int dmi_get_year(int year) { return 0; }
- static inline int dmi_name_in_vendors(const char *s) { return 0; }
-+static inline int dmi_name_in_serial(const char *s) { return 0; }
- #define dmi_available 0
- static inline int dmi_walk(void (*decode)(const struct dmi_header *))
- { return -1; }