From: Greg Kroah-Hartman Date: Mon, 9 Jun 2014 19:31:53 +0000 (-0700) Subject: 3.14-stable patches X-Git-Tag: v3.14.7~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5ac2595b7f4acd12531426fb1cfe35fbf3cd22fe;p=thirdparty%2Fkernel%2Fstable-queue.git 3.14-stable patches added patches: drm-i915-only-copy-back-the-modified-fields-to-userspace-from-execbuffer.patch drm-radeon-dpm-resume-fixes-for-some-systems.patch drm-radeon-use-the-cp-dma-on-cik.patch libata-blacklist-queued-trim-for-crucial-m500.patch sched-fix-sched_policy-0-comparison.patch --- diff --git a/queue-3.14/drm-i915-only-copy-back-the-modified-fields-to-userspace-from-execbuffer.patch b/queue-3.14/drm-i915-only-copy-back-the-modified-fields-to-userspace-from-execbuffer.patch new file mode 100644 index 00000000000..deee016daf9 --- /dev/null +++ b/queue-3.14/drm-i915-only-copy-back-the-modified-fields-to-userspace-from-execbuffer.patch @@ -0,0 +1,111 @@ +From 9aab8bff7aa3bee567213ad3c1fdfb217bb980a2 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Fri, 23 May 2014 10:45:52 +0100 +Subject: drm/i915: Only copy back the modified fields to userspace from execbuffer + +From: Chris Wilson + +commit 9aab8bff7aa3bee567213ad3c1fdfb217bb980a2 upstream. + +We only want to modifiy a single field in the userspace view of the +execbuffer command buffer, so explicitly change that rather than copy +everything back again. + +This serves two purposes: + +1. The single fields are much cheaper to copy (constant size so the +copy uses special case code) and much smaller than the whole array. + +2. We modify the array for internal use that need to be masked from +the user. + +Note: We need this backported since without it the next bugfix will +blow up when userspace recycles batchbuffers and relocations. + +Signed-off-by: Chris Wilson +Cc: Daniel Vetter +Signed-off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_gem_execbuffer.c | 54 +++++++++++++++++------------ + 1 file changed, 32 insertions(+), 22 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c ++++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c +@@ -766,9 +766,9 @@ i915_gem_execbuffer_relocate_slow(struct + * relocations were valid. + */ + for (j = 0; j < exec[i].relocation_count; j++) { +- if (copy_to_user(&user_relocs[j].presumed_offset, +- &invalid_offset, +- sizeof(invalid_offset))) { ++ if (__copy_to_user(&user_relocs[j].presumed_offset, ++ &invalid_offset, ++ sizeof(invalid_offset))) { + ret = -EFAULT; + mutex_lock(&dev->struct_mutex); + goto err; +@@ -1329,18 +1329,21 @@ i915_gem_execbuffer(struct drm_device *d + ret = i915_gem_do_execbuffer(dev, data, file, &exec2, exec2_list, + &dev_priv->gtt.base); + if (!ret) { ++ struct drm_i915_gem_exec_object __user *user_exec_list = ++ to_user_ptr(args->buffers_ptr); ++ + /* Copy the new buffer offsets back to the user's exec list. */ +- for (i = 0; i < args->buffer_count; i++) +- exec_list[i].offset = exec2_list[i].offset; +- /* ... and back out to userspace */ +- ret = copy_to_user(to_user_ptr(args->buffers_ptr), +- exec_list, +- sizeof(*exec_list) * args->buffer_count); +- if (ret) { +- ret = -EFAULT; +- DRM_DEBUG("failed to copy %d exec entries " +- "back to user (%d)\n", +- args->buffer_count, ret); ++ for (i = 0; i < args->buffer_count; i++) { ++ ret = __copy_to_user(&user_exec_list[i].offset, ++ &exec2_list[i].offset, ++ sizeof(user_exec_list[i].offset)); ++ if (ret) { ++ ret = -EFAULT; ++ DRM_DEBUG("failed to copy %d exec entries " ++ "back to user (%d)\n", ++ args->buffer_count, ret); ++ break; ++ } + } + } + +@@ -1388,14 +1391,21 @@ i915_gem_execbuffer2(struct drm_device * + &dev_priv->gtt.base); + if (!ret) { + /* Copy the new buffer offsets back to the user's exec list. */ +- ret = copy_to_user(to_user_ptr(args->buffers_ptr), +- exec2_list, +- sizeof(*exec2_list) * args->buffer_count); +- if (ret) { +- ret = -EFAULT; +- DRM_DEBUG("failed to copy %d exec entries " +- "back to user (%d)\n", +- args->buffer_count, ret); ++ struct drm_i915_gem_exec_object2 *user_exec_list = ++ to_user_ptr(args->buffers_ptr); ++ int i; ++ ++ for (i = 0; i < args->buffer_count; i++) { ++ ret = __copy_to_user(&user_exec_list[i].offset, ++ &exec2_list[i].offset, ++ sizeof(user_exec_list[i].offset)); ++ if (ret) { ++ ret = -EFAULT; ++ DRM_DEBUG("failed to copy %d exec entries " ++ "back to user\n", ++ args->buffer_count); ++ break; ++ } + } + } + diff --git a/queue-3.14/drm-radeon-dpm-resume-fixes-for-some-systems.patch b/queue-3.14/drm-radeon-dpm-resume-fixes-for-some-systems.patch new file mode 100644 index 00000000000..4ebc8315755 --- /dev/null +++ b/queue-3.14/drm-radeon-dpm-resume-fixes-for-some-systems.patch @@ -0,0 +1,76 @@ +From 3640da2faa952a2e9439a254c1ce76033ca0a6dc Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Fri, 30 May 2014 12:40:15 -0400 +Subject: drm/radeon/dpm: resume fixes for some systems + +From: Alex Deucher + +commit 3640da2faa952a2e9439a254c1ce76033ca0a6dc upstream. + +Setting the power state prior to restoring the display +hardware leads to blank screens on some systems. Drop +the power state set from dpm resume. The power state +will get set as part of the mode set sequence. Also +add an explicit power state set after mode set resume +to cover PX and headless systems. + +bug: +https://bugzilla.kernel.org/show_bug.cgi?id=76761 + +Signed-off-by: Alex Deucher +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/atombios_crtc.c | 6 ++---- + drivers/gpu/drm/radeon/radeon_device.c | 4 ++++ + drivers/gpu/drm/radeon/radeon_pm.c | 1 - + 3 files changed, 6 insertions(+), 5 deletions(-) + +--- a/drivers/gpu/drm/radeon/atombios_crtc.c ++++ b/drivers/gpu/drm/radeon/atombios_crtc.c +@@ -270,8 +270,6 @@ void atombios_crtc_dpms(struct drm_crtc + switch (mode) { + case DRM_MODE_DPMS_ON: + radeon_crtc->enabled = true; +- /* adjust pm to dpms changes BEFORE enabling crtcs */ +- radeon_pm_compute_clocks(rdev); + atombios_enable_crtc(crtc, ATOM_ENABLE); + if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev)) + atombios_enable_crtc_memreq(crtc, ATOM_ENABLE); +@@ -289,10 +287,10 @@ void atombios_crtc_dpms(struct drm_crtc + atombios_enable_crtc_memreq(crtc, ATOM_DISABLE); + atombios_enable_crtc(crtc, ATOM_DISABLE); + radeon_crtc->enabled = false; +- /* adjust pm to dpms changes AFTER disabling crtcs */ +- radeon_pm_compute_clocks(rdev); + break; + } ++ /* adjust pm to dpms */ ++ radeon_pm_compute_clocks(rdev); + } + + static void +--- a/drivers/gpu/drm/radeon/radeon_device.c ++++ b/drivers/gpu/drm/radeon/radeon_device.c +@@ -1536,6 +1536,10 @@ int radeon_resume_kms(struct drm_device + + radeon_restore_bios_scratch_regs(rdev); + ++ /* set the power state here in case we are a PX system or headless */ ++ if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) ++ radeon_pm_compute_clocks(rdev); ++ + if (fbcon) { + radeon_fbdev_set_suspend(rdev, 0); + console_unlock(); +--- a/drivers/gpu/drm/radeon/radeon_pm.c ++++ b/drivers/gpu/drm/radeon/radeon_pm.c +@@ -1082,7 +1082,6 @@ static void radeon_pm_resume_dpm(struct + if (ret) + goto dpm_resume_fail; + rdev->pm.dpm_enabled = true; +- radeon_pm_compute_clocks(rdev); + return; + + dpm_resume_fail: diff --git a/queue-3.14/drm-radeon-use-the-cp-dma-on-cik.patch b/queue-3.14/drm-radeon-use-the-cp-dma-on-cik.patch new file mode 100644 index 00000000000..b279f08248b --- /dev/null +++ b/queue-3.14/drm-radeon-use-the-cp-dma-on-cik.patch @@ -0,0 +1,34 @@ +From 91b0275c0ecd1870c5f8bfb73e2da2d6c29414b3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= +Date: Fri, 30 May 2014 17:52:27 +0200 +Subject: drm/radeon: use the CP DMA on CIK +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Christian=20K=C3=B6nig?= + +commit 91b0275c0ecd1870c5f8bfb73e2da2d6c29414b3 upstream. + +The SDMA sometimes doesn't seem to work reliable. + +Signed-off-by: Christian König +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_asic.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_asic.c ++++ b/drivers/gpu/drm/radeon/radeon_asic.c +@@ -2034,8 +2034,8 @@ static struct radeon_asic ci_asic = { + .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, + .dma = &cik_copy_dma, + .dma_ring_index = R600_RING_TYPE_DMA_INDEX, +- .copy = &cik_copy_dma, +- .copy_ring_index = R600_RING_TYPE_DMA_INDEX, ++ .copy = &cik_copy_cpdma, ++ .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, + }, + .surface = { + .set_reg = r600_set_surface_reg, diff --git a/queue-3.14/libata-blacklist-queued-trim-for-crucial-m500.patch b/queue-3.14/libata-blacklist-queued-trim-for-crucial-m500.patch new file mode 100644 index 00000000000..85167bb39e6 --- /dev/null +++ b/queue-3.14/libata-blacklist-queued-trim-for-crucial-m500.patch @@ -0,0 +1,49 @@ +From 3b8d2676d15d6b2326757adb66b70a9cd6650373 Mon Sep 17 00:00:00 2001 +From: "Martin K. Petersen" +Date: Mon, 2 Jun 2014 19:57:16 -0400 +Subject: libata: Blacklist queued trim for Crucial M500 + +From: "Martin K. Petersen" + +commit 3b8d2676d15d6b2326757adb66b70a9cd6650373 upstream. + +Queued trim only works for some users with MU05 firmware. Revert to +blacklisting all firmware versions. + +Introduced by commit d121f7d0cbb8 ("libata: Update queued trim blacklist +for M5x0 drives") which this effectively reverts, while retaining the +blacklisting of M550. + +See + + https://bugzilla.kernel.org/show_bug.cgi?id=71371 + +for reports of trouble with MU05 firmware. + +Signed-off-by: Martin K. Petersen +Cc: Alan Cox +Cc: Tejun Heo +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/libata-core.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/ata/libata-core.c ++++ b/drivers/ata/libata-core.c +@@ -4224,10 +4224,10 @@ static const struct ata_blacklist_entry + { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER }, + + /* devices that don't properly handle queued TRIM commands */ +- { "Micron_M500*", "MU0[1-4]*", ATA_HORKAGE_NO_NCQ_TRIM, }, +- { "Crucial_CT???M500SSD*", "MU0[1-4]*", ATA_HORKAGE_NO_NCQ_TRIM, }, +- { "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, +- { "Crucial_CT???M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, ++ { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, ++ { "Crucial_CT???M500SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, ++ { "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, ++ { "Crucial_CT???M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, + + /* + * Some WD SATA-I drives spin up and down erratically when the link diff --git a/queue-3.14/sched-fix-sched_policy-0-comparison.patch b/queue-3.14/sched-fix-sched_policy-0-comparison.patch new file mode 100644 index 00000000000..6a66ffcea5b --- /dev/null +++ b/queue-3.14/sched-fix-sched_policy-0-comparison.patch @@ -0,0 +1,39 @@ +From b14ed2c273f8ab872ae4e6735fe5ab09cb14b8c3 Mon Sep 17 00:00:00 2001 +From: Richard Weinberger +Date: Mon, 2 Jun 2014 22:38:34 +0200 +Subject: sched: Fix sched_policy < 0 comparison + +From: Richard Weinberger + +commit b14ed2c273f8ab872ae4e6735fe5ab09cb14b8c3 upstream. + +attr.sched_policy is u32, therefore a comparison against < 0 is never true. +Fix this by casting sched_policy to int. + +This issue was reported by coverity CID 1219934. + +Fixes: dbdb22754fde ("sched: Disallow sched_attr::sched_policy < 0") +Signed-off-by: Richard Weinberger +Signed-off-by: Peter Zijlstra +Cc: Michael Kerrisk +Cc: Linus Torvalds +Link: http://lkml.kernel.org/r/1401741514-7045-1-git-send-email-richard@nod.at +Signed-off-by: Ingo Molnar +Cc: Dave Jones +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -3707,7 +3707,7 @@ SYSCALL_DEFINE3(sched_setattr, pid_t, pi + if (retval) + return retval; + +- if (attr.sched_policy < 0) ++ if ((int)attr.sched_policy < 0) + return -EINVAL; + + rcu_read_lock(); diff --git a/queue-3.14/series b/queue-3.14/series index 8220fb6e674..cb225fa882a 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -36,3 +36,8 @@ sched-deadline-restrict-user-params-max-value-to-2-63-ns.patch sched-fix-hotplug-vs.-set_cpus_allowed_ptr.patch sched-dl-fix-race-in-dl_task_timer.patch drm-radeon-avoid-crash-if-vm-command-submission-isn-t-available.patch +drm-i915-only-copy-back-the-modified-fields-to-userspace-from-execbuffer.patch +drm-radeon-dpm-resume-fixes-for-some-systems.patch +drm-radeon-use-the-cp-dma-on-cik.patch +libata-blacklist-queued-trim-for-crucial-m500.patch +sched-fix-sched_policy-0-comparison.patch