backports: revert DMI_EXACT_MATCH() for older kernels
authorLuis R. Rodriguez <mcgrof@do-not-panic.com>
Fri, 19 Jul 2013 04:40:15 +0000 (04:40 +0000)
committerLuis R. Rodriguez <mcgrof@do-not-panic.com>
Fri, 19 Jul 2013 22:05:32 +0000 (15:05 -0700)
commit6c58400c116908aebfefa94a92ff9ad4e0bfd631
treee2a4eb7daf5913ff9498945a804e04ec7094ef96
parent6a154545c3ecc09dc6cc375409dc55abe763d0e7
backports: revert DMI_EXACT_MATCH() for older kernels

struct dmi_strmatch was modified on v3.11 with a
exact_match member. The DMI_EXACT_MATCH() macro was
added as a mod version of DMI_MATCH() to account for
dmi strings that look closely like each other. An
example is D510MO Vs D510MOV.

Since exact_match is is not available on older kernels
we can't use it and must revert to the old DMI_MATCH().
Addressing the desired behaviour will require a separate
change to deal with addressing the difference
in the behaviour.

Chris Wilson recommends that if we can't use this we should
also rever the DMI related fixes. I believe these are:

dcf6d294830d46b0e6901477fb4bf455281d90c8 - drm/i915: quirk away phantom LVDS on Intel's D525MW mainboard
e5614f0c2d0f4d7f0b8ef745d34593baf2c5dbf8 - drm/i915: quirk away phantom LVDS on Intel's D510MO mainboard

Once we get confirmation we can do that.

Proof of why we can't backport DMI_EXACT_MATCH():

DMI_EXACT_MATCH uses struct dmi_strmatch's new
member exact_match:

@@ -456,7 +456,8 @@ enum dmi_field {
 };

 struct dmi_strmatch {
-       unsigned char slot;
+       unsigned char slot:7;
+       unsigned char exact_match:1;
char substr[79];
 };

Prior to 5017b285 we only had slot member so to use
DMI_EXACT_MATCH() with its intent we'd have to do something
like:
slot |= 1

if its called. This however assumes though that older code has
the sanity check as changed in 5017b285 on drivers/firmware/dmi_scan.c.
dmi_scan.o gets linked with CONFIG_DMI. At least for x86 that gets
objects sprinkled on arch/x86/, but more importantly CONFIG_DMI is
bool. I've argued how I envision us being able to backport core
components before (see 0935deab for the hint) but as it is right
now we can't. We only backport things we can throw in as modular.

mcgrof@frijol ~/linux-stable (git::master)$ git describe --contains 5017b285
v3.11-rc1~99^2~254

commit 5017b2851373ee15c7035151853bb1448800cae2
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Wed Jul 3 15:05:02 2013 -0700

    dmi: add support for exact DMI matches in addition to substring matching

    dmi_match() considers a substring match to be a successful match.  This is
    not always sufficient to distinguish between DMI data for different
    systems.  Add support for exact string matching using strcmp() in addition
    to the substring matching using strstr().

    The specific use case in the i915 driver is to allow us to use an exact
    match for D510MO, without also incorrectly matching D510MOV:

      {
        .ident = "Intel D510MO",
        .matches = {
                DMI_MATCH(DMI_BOARD_VENDOR, "Intel"),
                DMI_EXACT_MATCH(DMI_BOARD_NAME, "D510MO"),
        },
      }

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Cc: <annndddrr@gmail.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Cornel Panceac <cpanceac@gmail.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: jani.nikula@intel.com
Cc: annndddrr@gmail.com
Cc: chris@chris-wilson.co.uk
Cc: cpanceac@gmail.com
Cc: daniel.vetter@ffwll.ch
Cc: greg@kroah.com
Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
backport/backport-include/linux/mod_devicetable.h