]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Jun 2014 19:31:53 +0000 (12:31 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Jun 2014 19:31:53 +0000 (12:31 -0700)
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

queue-3.14/drm-i915-only-copy-back-the-modified-fields-to-userspace-from-execbuffer.patch [new file with mode: 0644]
queue-3.14/drm-radeon-dpm-resume-fixes-for-some-systems.patch [new file with mode: 0644]
queue-3.14/drm-radeon-use-the-cp-dma-on-cik.patch [new file with mode: 0644]
queue-3.14/libata-blacklist-queued-trim-for-crucial-m500.patch [new file with mode: 0644]
queue-3.14/sched-fix-sched_policy-0-comparison.patch [new file with mode: 0644]
queue-3.14/series

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 (file)
index 0000000..deee016
--- /dev/null
@@ -0,0 +1,111 @@
+From 9aab8bff7aa3bee567213ad3c1fdfb217bb980a2 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+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 <chris@chris-wilson.co.uk>
+
+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 <chris@chris-wilson.co.uk>
+Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..4ebc831
--- /dev/null
@@ -0,0 +1,76 @@
+From 3640da2faa952a2e9439a254c1ce76033ca0a6dc Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Fri, 30 May 2014 12:40:15 -0400
+Subject: drm/radeon/dpm: resume fixes for some systems
+
+From: Alex Deucher <alexdeucher@gmail.com>
+
+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 <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..b279f08
--- /dev/null
@@ -0,0 +1,34 @@
+From 91b0275c0ecd1870c5f8bfb73e2da2d6c29414b3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+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?= <christian.koenig@amd.com>
+
+commit 91b0275c0ecd1870c5f8bfb73e2da2d6c29414b3 upstream.
+
+The SDMA sometimes doesn't seem to work reliable.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..85167bb
--- /dev/null
@@ -0,0 +1,49 @@
+From 3b8d2676d15d6b2326757adb66b70a9cd6650373 Mon Sep 17 00:00:00 2001
+From: "Martin K. Petersen" <martin.petersen@oracle.com>
+Date: Mon, 2 Jun 2014 19:57:16 -0400
+Subject: libata: Blacklist queued trim for Crucial M500
+
+From: "Martin K. Petersen" <martin.petersen@oracle.com>
+
+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 <martin.petersen@oracle.com>
+Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Cc: Tejun Heo <tj@kernel.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..6a66ffc
--- /dev/null
@@ -0,0 +1,39 @@
+From b14ed2c273f8ab872ae4e6735fe5ab09cb14b8c3 Mon Sep 17 00:00:00 2001
+From: Richard Weinberger <richard@nod.at>
+Date: Mon, 2 Jun 2014 22:38:34 +0200
+Subject: sched: Fix sched_policy < 0 comparison
+
+From: Richard Weinberger <richard@nod.at>
+
+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 <richard@nod.at>
+Signed-off-by: Peter Zijlstra <peterz@infradead.org>
+Cc: Michael Kerrisk <mtk.manpages@gmail.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Link: http://lkml.kernel.org/r/1401741514-7045-1-git-send-email-richard@nod.at
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Cc: Dave Jones <davej@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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();
index 8220fb6e674b297919d4dcb4ee89c605c4d63141..cb225fa882a9b85704ce2847ada06a89b5839de7 100644 (file)
@@ -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