--- /dev/null
+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;
++ }
+ }
+ }
+
--- /dev/null
+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:
--- /dev/null
+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,
--- /dev/null
+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
--- /dev/null
+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();
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