From: Greg Kroah-Hartman Date: Fri, 23 Oct 2015 16:34:24 +0000 (-0700) Subject: 4.1-stable patches X-Git-Tag: v3.14.56~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=66c8fe08c8d417b561f05bf0954173b08a47841e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.1-stable patches added patches: dm-thin-fix-missing-pool-reference-count-decrement-in-pool_ctr-error-path.patch drm-dp-mst-make-mst-i2c-transfer-code-more-robust.patch drm-radeon-add-pm-sysfs-files-late.patch drm-radeon-attach-tile-property-to-mst-connector.patch --- diff --git a/queue-4.1/dm-thin-fix-missing-pool-reference-count-decrement-in-pool_ctr-error-path.patch b/queue-4.1/dm-thin-fix-missing-pool-reference-count-decrement-in-pool_ctr-error-path.patch new file mode 100644 index 00000000000..ca5892f5bb6 --- /dev/null +++ b/queue-4.1/dm-thin-fix-missing-pool-reference-count-decrement-in-pool_ctr-error-path.patch @@ -0,0 +1,28 @@ +From ba30670f4d5292c4e7f7980bbd5071f7c4794cdd Mon Sep 17 00:00:00 2001 +From: Mike Snitzer +Date: Tue, 13 Oct 2015 12:04:28 -0400 +Subject: dm thin: fix missing pool reference count decrement in pool_ctr error path + +From: Mike Snitzer + +commit ba30670f4d5292c4e7f7980bbd5071f7c4794cdd upstream. + +Fixes: ac8c3f3df ("dm thin: generate event when metadata threshold passed") +Signed-off-by: Mike Snitzer +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/md/dm-thin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/md/dm-thin.c ++++ b/drivers/md/dm-thin.c +@@ -2959,7 +2959,7 @@ static int pool_ctr(struct dm_target *ti + metadata_low_callback, + pool); + if (r) +- goto out_free_pt; ++ goto out_flags_changed; + + pt->callbacks.congested_fn = pool_is_congested; + dm_table_add_target_callbacks(ti->table, &pt->callbacks); diff --git a/queue-4.1/drm-dp-mst-make-mst-i2c-transfer-code-more-robust.patch b/queue-4.1/drm-dp-mst-make-mst-i2c-transfer-code-more-robust.patch new file mode 100644 index 00000000000..459657e346f --- /dev/null +++ b/queue-4.1/drm-dp-mst-make-mst-i2c-transfer-code-more-robust.patch @@ -0,0 +1,58 @@ +From ae491542cbbbcca0ec8938c37d4079a985e58440 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 14 Oct 2015 18:51:17 +1000 +Subject: drm/dp/mst: make mst i2c transfer code more robust. + +From: Dave Airlie + +commit ae491542cbbbcca0ec8938c37d4079a985e58440 upstream. + +This zeroes the msg so no random stack data ends up getting +sent, it also limits the function to not accepting > 4 +i2c msgs. + +Reviewed-by: Daniel Vetter +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_dp_mst_topology.c | 3 ++- + include/drm/drm_dp_mst_helper.h | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/drm_dp_mst_topology.c ++++ b/drivers/gpu/drm/drm_dp_mst_topology.c +@@ -2766,12 +2766,13 @@ static int drm_dp_mst_i2c_xfer(struct i2 + if (msgs[num - 1].flags & I2C_M_RD) + reading = true; + +- if (!reading) { ++ if (!reading || (num - 1 > DP_REMOTE_I2C_READ_MAX_TRANSACTIONS)) { + DRM_DEBUG_KMS("Unsupported I2C transaction for MST device\n"); + ret = -EIO; + goto out; + } + ++ memset(&msg, 0, sizeof(msg)); + msg.req_type = DP_REMOTE_I2C_READ; + msg.u.i2c_read.num_transactions = num - 1; + msg.u.i2c_read.port_number = port->port_num; +--- a/include/drm/drm_dp_mst_helper.h ++++ b/include/drm/drm_dp_mst_helper.h +@@ -253,6 +253,7 @@ struct drm_dp_remote_dpcd_write { + u8 *bytes; + }; + ++#define DP_REMOTE_I2C_READ_MAX_TRANSACTIONS 4 + struct drm_dp_remote_i2c_read { + u8 num_transactions; + u8 port_number; +@@ -262,7 +263,7 @@ struct drm_dp_remote_i2c_read { + u8 *bytes; + u8 no_stop_bit; + u8 i2c_transaction_delay; +- } transactions[4]; ++ } transactions[DP_REMOTE_I2C_READ_MAX_TRANSACTIONS]; + u8 read_i2c_device_id; + u8 num_bytes_read; + }; diff --git a/queue-4.1/drm-radeon-add-pm-sysfs-files-late.patch b/queue-4.1/drm-radeon-add-pm-sysfs-files-late.patch new file mode 100644 index 00000000000..7898e54dd7f --- /dev/null +++ b/queue-4.1/drm-radeon-add-pm-sysfs-files-late.patch @@ -0,0 +1,131 @@ +From 51a4726b04e880fdd9b4e0e58b13f70b0a68a7f5 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 30 Sep 2015 16:45:52 -0400 +Subject: drm/radeon: add pm sysfs files late + +From: Alex Deucher + +commit 51a4726b04e880fdd9b4e0e58b13f70b0a68a7f5 upstream. + +They were added relatively early in the driver init process +which meant that in some cases the driver was not finished +initializing before external tools tried to use them which +could result in a crash depending on the timing. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_display.c | 14 +------ + drivers/gpu/drm/radeon/radeon_pm.c | 63 +++++++++++++++++++------------- + 2 files changed, 40 insertions(+), 37 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_display.c ++++ b/drivers/gpu/drm/radeon/radeon_display.c +@@ -1633,18 +1633,8 @@ int radeon_modeset_init(struct radeon_de + radeon_fbdev_init(rdev); + drm_kms_helper_poll_init(rdev->ddev); + +- if (rdev->pm.dpm_enabled) { +- /* do dpm late init */ +- ret = radeon_pm_late_init(rdev); +- if (ret) { +- rdev->pm.dpm_enabled = false; +- DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n"); +- } +- /* set the dpm state for PX since there won't be +- * a modeset to call this. +- */ +- radeon_pm_compute_clocks(rdev); +- } ++ /* do pm late init */ ++ ret = radeon_pm_late_init(rdev); + + return 0; + } +--- a/drivers/gpu/drm/radeon/radeon_pm.c ++++ b/drivers/gpu/drm/radeon/radeon_pm.c +@@ -1331,14 +1331,6 @@ static int radeon_pm_init_old(struct rad + INIT_DELAYED_WORK(&rdev->pm.dynpm_idle_work, radeon_dynpm_idle_work_handler); + + if (rdev->pm.num_power_states > 1) { +- /* where's the best place to put these? */ +- ret = device_create_file(rdev->dev, &dev_attr_power_profile); +- if (ret) +- DRM_ERROR("failed to create device file for power profile\n"); +- ret = device_create_file(rdev->dev, &dev_attr_power_method); +- if (ret) +- DRM_ERROR("failed to create device file for power method\n"); +- + if (radeon_debugfs_pm_init(rdev)) { + DRM_ERROR("Failed to register debugfs file for PM!\n"); + } +@@ -1396,20 +1388,6 @@ static int radeon_pm_init_dpm(struct rad + goto dpm_failed; + rdev->pm.dpm_enabled = true; + +- ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state); +- if (ret) +- DRM_ERROR("failed to create device file for dpm state\n"); +- ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); +- if (ret) +- DRM_ERROR("failed to create device file for dpm state\n"); +- /* XXX: these are noops for dpm but are here for backwards compat */ +- ret = device_create_file(rdev->dev, &dev_attr_power_profile); +- if (ret) +- DRM_ERROR("failed to create device file for power profile\n"); +- ret = device_create_file(rdev->dev, &dev_attr_power_method); +- if (ret) +- DRM_ERROR("failed to create device file for power method\n"); +- + if (radeon_debugfs_pm_init(rdev)) { + DRM_ERROR("Failed to register debugfs file for dpm!\n"); + } +@@ -1550,9 +1528,44 @@ int radeon_pm_late_init(struct radeon_de + int ret = 0; + + if (rdev->pm.pm_method == PM_METHOD_DPM) { +- mutex_lock(&rdev->pm.mutex); +- ret = radeon_dpm_late_enable(rdev); +- mutex_unlock(&rdev->pm.mutex); ++ if (rdev->pm.dpm_enabled) { ++ ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state); ++ if (ret) ++ DRM_ERROR("failed to create device file for dpm state\n"); ++ ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); ++ if (ret) ++ DRM_ERROR("failed to create device file for dpm state\n"); ++ /* XXX: these are noops for dpm but are here for backwards compat */ ++ ret = device_create_file(rdev->dev, &dev_attr_power_profile); ++ if (ret) ++ DRM_ERROR("failed to create device file for power profile\n"); ++ ret = device_create_file(rdev->dev, &dev_attr_power_method); ++ if (ret) ++ DRM_ERROR("failed to create device file for power method\n"); ++ ++ mutex_lock(&rdev->pm.mutex); ++ ret = radeon_dpm_late_enable(rdev); ++ mutex_unlock(&rdev->pm.mutex); ++ if (ret) { ++ rdev->pm.dpm_enabled = false; ++ DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n"); ++ } else { ++ /* set the dpm state for PX since there won't be ++ * a modeset to call this. ++ */ ++ radeon_pm_compute_clocks(rdev); ++ } ++ } ++ } else { ++ if (rdev->pm.num_power_states > 1) { ++ /* where's the best place to put these? */ ++ ret = device_create_file(rdev->dev, &dev_attr_power_profile); ++ if (ret) ++ DRM_ERROR("failed to create device file for power profile\n"); ++ ret = device_create_file(rdev->dev, &dev_attr_power_method); ++ if (ret) ++ DRM_ERROR("failed to create device file for power method\n"); ++ } + } + return ret; + } diff --git a/queue-4.1/drm-radeon-attach-tile-property-to-mst-connector.patch b/queue-4.1/drm-radeon-attach-tile-property-to-mst-connector.patch new file mode 100644 index 00000000000..dfe6d714f6e --- /dev/null +++ b/queue-4.1/drm-radeon-attach-tile-property-to-mst-connector.patch @@ -0,0 +1,28 @@ +From bc8c131ccdd62d4ed4f33c6b50f92907e7c32dee Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Thu, 15 Oct 2015 09:04:21 +1000 +Subject: drm/radeon: attach tile property to mst connector + +From: Dave Airlie + +commit bc8c131ccdd62d4ed4f33c6b50f92907e7c32dee upstream. + +This allows tiled monitors to work with radeon once mst is enabled. + +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_dp_mst.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/gpu/drm/radeon/radeon_dp_mst.c ++++ b/drivers/gpu/drm/radeon/radeon_dp_mst.c +@@ -283,6 +283,7 @@ static struct drm_connector *radeon_dp_a + radeon_connector->mst_encoder = radeon_dp_create_fake_mst_encoder(master); + + drm_object_attach_property(&connector->base, dev->mode_config.path_property, 0); ++ drm_object_attach_property(&connector->base, dev->mode_config.tile_property, 0); + drm_mode_connector_set_path_property(connector, pathprop); + drm_reinit_primary_mode_group(dev); + diff --git a/queue-4.1/series b/queue-4.1/series index 27eee1b136d..2ea6252af50 100644 --- a/queue-4.1/series +++ b/queue-4.1/series @@ -30,3 +30,7 @@ i2c-designware-do-not-use-parameters-from-acpi-on-dell-inspiron-7348.patch i2c-designware-platdrv-enable-runtimepm-before-registering-to-the-core.patch workqueue-make-sure-delayed-work-run-in-local-cpu.patch drm-nouveau-fbcon-take-runpm-reference-when-userspace-has-an-open-fd.patch +drm-dp-mst-make-mst-i2c-transfer-code-more-robust.patch +drm-radeon-attach-tile-property-to-mst-connector.patch +drm-radeon-add-pm-sysfs-files-late.patch +dm-thin-fix-missing-pool-reference-count-decrement-in-pool_ctr-error-path.patch