--- /dev/null
+From 34511dce4b35685d3988d5c8b100d11a068db5bd Mon Sep 17 00:00:00 2001
+From: Mika Kahola <mika.kahola@intel.com>
+Date: Mon, 20 Jun 2016 11:10:26 +0300
+Subject: drm/i915: Revert DisplayPort fast link training feature
+
+From: Mika Kahola <mika.kahola@intel.com>
+
+commit 34511dce4b35685d3988d5c8b100d11a068db5bd upstream.
+
+It has been found out that in some HW combination the DisplayPort
+fast link training feature caused screen flickering. Let's revert
+this feature for now until we can ensure that the feature works for
+all platforms.
+
+This is a manual revert of commits 5fa836a9d859 ("drm/i915: DP link
+training optimization") and 4e96c97742f4 ("drm/i915: eDP link training
+optimization").
+
+Fixes: 5fa836a9d859 ("drm/i915: DP link training optimization")
+Fixes: 4e96c97742f4 ("drm/i915: eDP link training optimization")
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91393
+Reviewed-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Mika Kahola <mika.kahola@intel.com>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Link: http://patchwork.freedesktop.org/patch/msgid/1466410226-19543-1-git-send-email-mika.kahola@intel.com
+(cherry picked from commit 91df09d92ad82c8778ca218097bf827f154292ca)
+Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_dp.c | 3 ---
+ drivers/gpu/drm/i915/intel_dp_link_training.c | 25 ++-----------------------
+ drivers/gpu/drm/i915/intel_drv.h | 2 --
+ 3 files changed, 2 insertions(+), 28 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_dp.c
++++ b/drivers/gpu/drm/i915/intel_dp.c
+@@ -5022,9 +5022,6 @@ intel_dp_hpd_pulse(struct intel_digital_
+ intel_display_power_get(dev_priv, power_domain);
+
+ if (long_hpd) {
+- /* indicate that we need to restart link training */
+- intel_dp->train_set_valid = false;
+-
+ if (!intel_digital_port_connected(dev_priv, intel_dig_port))
+ goto mst_fail;
+
+--- a/drivers/gpu/drm/i915/intel_dp_link_training.c
++++ b/drivers/gpu/drm/i915/intel_dp_link_training.c
+@@ -85,8 +85,7 @@ static bool
+ intel_dp_reset_link_train(struct intel_dp *intel_dp,
+ uint8_t dp_train_pat)
+ {
+- if (!intel_dp->train_set_valid)
+- memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
++ memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
+ intel_dp_set_signal_levels(intel_dp);
+ return intel_dp_set_link_train(intel_dp, dp_train_pat);
+ }
+@@ -161,22 +160,6 @@ intel_dp_link_training_clock_recovery(st
+ break;
+ }
+
+- /*
+- * if we used previously trained voltage and pre-emphasis values
+- * and we don't get clock recovery, reset link training values
+- */
+- if (intel_dp->train_set_valid) {
+- DRM_DEBUG_KMS("clock recovery not ok, reset");
+- /* clear the flag as we are not reusing train set */
+- intel_dp->train_set_valid = false;
+- if (!intel_dp_reset_link_train(intel_dp,
+- DP_TRAINING_PATTERN_1 |
+- DP_LINK_SCRAMBLING_DISABLE)) {
+- DRM_ERROR("failed to enable link training\n");
+- return;
+- }
+- continue;
+- }
+
+ /* Check to see if we've tried the max voltage */
+ for (i = 0; i < intel_dp->lane_count; i++)
+@@ -284,7 +267,6 @@ intel_dp_link_training_channel_equalizat
+ /* Make sure clock is still ok */
+ if (!drm_dp_clock_recovery_ok(link_status,
+ intel_dp->lane_count)) {
+- intel_dp->train_set_valid = false;
+ intel_dp_link_training_clock_recovery(intel_dp);
+ intel_dp_set_link_train(intel_dp,
+ training_pattern |
+@@ -301,7 +283,6 @@ intel_dp_link_training_channel_equalizat
+
+ /* Try 5 times, then try clock recovery if that fails */
+ if (tries > 5) {
+- intel_dp->train_set_valid = false;
+ intel_dp_link_training_clock_recovery(intel_dp);
+ intel_dp_set_link_train(intel_dp,
+ training_pattern |
+@@ -322,10 +303,8 @@ intel_dp_link_training_channel_equalizat
+
+ intel_dp_set_idle_link_train(intel_dp);
+
+- if (channel_eq) {
+- intel_dp->train_set_valid = true;
++ if (channel_eq)
+ DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n");
+- }
+ }
+
+ void intel_dp_stop_link_train(struct intel_dp *intel_dp)
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -811,8 +811,6 @@ struct intel_dp {
+ /* This is called before a link training is starterd */
+ void (*prepare_link_retrain)(struct intel_dp *intel_dp);
+
+- bool train_set_valid;
+-
+ /* Displayport compliance testing */
+ unsigned long compliance_test_type;
+ unsigned long compliance_test_data;
--- /dev/null
+From 21765194cecf2e4514ad75244df459f188140a0f Mon Sep 17 00:00:00 2001
+From: Vivek Goyal <vgoyal@redhat.com>
+Date: Fri, 20 May 2016 09:04:26 -0400
+Subject: ovl: Do d_type check only if work dir creation was successful
+
+From: Vivek Goyal <vgoyal@redhat.com>
+
+commit 21765194cecf2e4514ad75244df459f188140a0f upstream.
+
+d_type check requires successful creation of workdir as iterates
+through work dir and expects work dir to be present in it. If that's
+not the case, this check will always return d_type not supported even
+if underlying filesystem might be supporting it.
+
+So don't do this check if work dir creation failed in previous step.
+
+Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
+Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/overlayfs/super.c | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+--- a/fs/overlayfs/super.c
++++ b/fs/overlayfs/super.c
+@@ -1064,16 +1064,19 @@ static int ovl_fill_super(struct super_b
+ /*
+ * Upper should support d_type, else whiteouts are visible.
+ * Given workdir and upper are on same fs, we can do
+- * iterate_dir() on workdir.
++ * iterate_dir() on workdir. This check requires successful
++ * creation of workdir in previous step.
+ */
+- err = ovl_check_d_type_supported(&workpath);
+- if (err < 0)
+- goto out_put_workdir;
++ if (ufs->workdir) {
++ err = ovl_check_d_type_supported(&workpath);
++ if (err < 0)
++ goto out_put_workdir;
+
+- if (!err) {
+- pr_err("overlayfs: upper fs needs to support d_type.\n");
+- err = -EINVAL;
+- goto out_put_workdir;
++ if (!err) {
++ pr_err("overlayfs: upper fs needs to support d_type.\n");
++ err = -EINVAL;
++ goto out_put_workdir;
++ }
+ }
+ }
+
--- /dev/null
+From e7c0b5991dd1be7b6f6dc2b54a15a0f47b64b007 Mon Sep 17 00:00:00 2001
+From: Vivek Goyal <vgoyal@redhat.com>
+Date: Fri, 1 Jul 2016 10:02:44 -0400
+Subject: ovl: warn instead of error if d_type is not supported
+
+From: Vivek Goyal <vgoyal@redhat.com>
+
+commit e7c0b5991dd1be7b6f6dc2b54a15a0f47b64b007 upstream.
+
+overlay needs underlying fs to support d_type. Recently I put in a
+patch in to detect this condition and started failing mount if
+underlying fs did not support d_type.
+
+But this breaks existing configurations over kernel upgrade. Those who
+are running docker (partially broken configuration) with xfs not
+supporting d_type, are surprised that after kernel upgrade docker does
+not run anymore.
+
+https://github.com/docker/docker/issues/22937#issuecomment-229881315
+
+So instead of erroring out, detect broken configuration and warn
+about it. This should allow existing docker setups to continue
+working after kernel upgrade.
+
+Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
+Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
+Fixes: 45aebeaf4f67 ("ovl: Ensure upper filesystem supports d_type")
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/overlayfs/super.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/fs/overlayfs/super.c
++++ b/fs/overlayfs/super.c
+@@ -1072,11 +1072,13 @@ static int ovl_fill_super(struct super_b
+ if (err < 0)
+ goto out_put_workdir;
+
+- if (!err) {
+- pr_err("overlayfs: upper fs needs to support d_type.\n");
+- err = -EINVAL;
+- goto out_put_workdir;
+- }
++ /*
++ * We allowed this configuration and don't want to
++ * break users over kernel upgrade. So warn instead
++ * of erroring out.
++ */
++ if (!err)
++ pr_warn("overlayfs: upper fs needs to support d_type.\n");
+ }
+ }
+