Hi Luis -
On Sat, 20 Jul 2013, "Luis R. Rodriguez" <[email protected]> wrote:
> From: "Luis R. Rodriguez" <[email protected]>
>
> 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.
I agree with Chris about dropping the above two instead of carrying this
patch, if you can't backport DMI_EXACT_MATCH implementation. As is, this
would regress the longer named variants of D525MW and D510MO.
If more users for DMI_EXACT_MATCH start showing up, you may need to
figure out a better way if you want to backport the quirks.
BR,
Jani.
>
> 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 <[email protected]>
> 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 <[email protected]>
> Cc: <[email protected]>
> Cc: Chris Wilson <[email protected]>
> Cc: Cornel Panceac <[email protected]>
> Acked-by: Daniel Vetter <[email protected]>
> Cc: Greg KH <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>
>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Luis R. Rodriguez <[email protected]>
> ---
> backport/backport-include/linux/mod_devicetable.h | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/backport/backport-include/linux/mod_devicetable.h
> b/backport/backport-include/linux/mod_devicetable.h
> index 1f85ce6..5b63637 100644
> --- a/backport/backport-include/linux/mod_devicetable.h
> +++ b/backport/backport-include/linux/mod_devicetable.h
> @@ -2,6 +2,10 @@
> #define __BACKPORT_MOD_DEVICETABLE_H
> #include_next <linux/mod_devicetable.h>
>
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
> +#define DMI_EXACT_MATCH(a, b) { a, b }
> +#endif
> +
> #ifndef HID_BUS_ANY
> #define HID_BUS_ANY 0xffff
> #endif
> --
> 1.7.10.4
>
--
Jani Nikula, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe backports" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html