--- /dev/null
+From 50b8f5aec04ebec7dbdf2adb17220b9148c99e63 Mon Sep 17 00:00:00 2001
+From: wojciech kapuscinski <wojtask9@wp.pl>
+Date: Tue, 1 Oct 2013 19:54:33 -0400
+Subject: drm/radeon: fix hw contexts for SUMO2 asics
+
+From: wojciech kapuscinski <wojtask9@wp.pl>
+
+commit 50b8f5aec04ebec7dbdf2adb17220b9148c99e63 upstream.
+
+They have 4 rather than 8.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=63599
+
+Signed-off-by: wojciech kapuscinski <wojtask9@wp.pl>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/evergreen.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -1912,7 +1912,7 @@ static void evergreen_gpu_init(struct ra
+ rdev->config.evergreen.sx_max_export_size = 256;
+ rdev->config.evergreen.sx_max_export_pos_size = 64;
+ rdev->config.evergreen.sx_max_export_smx_size = 192;
+- rdev->config.evergreen.max_hw_contexts = 8;
++ rdev->config.evergreen.max_hw_contexts = 4;
+ rdev->config.evergreen.sq_num_cf_insts = 2;
+
+ rdev->config.evergreen.sc_prim_fifo_size = 0x40;
--- /dev/null
+From e8420a8ece80b3fe810415ecf061d54ca7fab266 Mon Sep 17 00:00:00 2001
+From: Cyril Hrubis <chrubis@suse.cz>
+Date: Mon, 29 Apr 2013 15:08:33 -0700
+Subject: mm/mmap: check for RLIMIT_AS before unmapping
+
+From: Cyril Hrubis <chrubis@suse.cz>
+
+commit e8420a8ece80b3fe810415ecf061d54ca7fab266 upstream.
+
+Fix a corner case for MAP_FIXED when requested mapping length is larger
+than rlimit for virtual memory. In such case any overlapping mappings
+are unmapped before we check for the limit and return ENOMEM.
+
+The check is moved before the loop that unmaps overlapping parts of
+existing mappings. When we are about to hit the limit (currently mapped
+pages + len > limit) we scan for overlapping pages and check again
+accounting for them.
+
+This fixes situation when userspace program expects that the previous
+mappings are preserved after the mmap() syscall has returned with error.
+(POSIX clearly states that successfull mapping shall replace any
+previous mappings.)
+
+This corner case was found and can be tested with LTP testcase:
+
+testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
+
+In this case the mmap, which is clearly over current limit, unmaps
+dynamic libraries and the testcase segfaults right after returning into
+userspace.
+
+I've also looked at the second instance of the unmapping loop in the
+do_brk(). The do_brk() is called from brk() syscall and from vm_brk().
+The brk() syscall checks for overlapping mappings and bails out when
+there are any (so it can't be triggered from the brk syscall). The
+vm_brk() is called only from binmft handlers so it shouldn't be
+triggered unless binmft handler created overlapping mappings.
+
+Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
+Reviewed-by: Mel Gorman <mgorman@suse.de>
+Reviewed-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Xishi Qiu <qiuxishi@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/mmap.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 46 insertions(+), 4 deletions(-)
+
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -6,6 +6,7 @@
+ * Address space accounting code <alan@lxorguk.ukuu.org.uk>
+ */
+
++#include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/backing-dev.h>
+ #include <linux/mm.h>
+@@ -392,6 +393,34 @@ find_vma_prepare(struct mm_struct *mm, u
+ return vma;
+ }
+
++static unsigned long count_vma_pages_range(struct mm_struct *mm,
++ unsigned long addr, unsigned long end)
++{
++ unsigned long nr_pages = 0;
++ struct vm_area_struct *vma;
++
++ /* Find first overlaping mapping */
++ vma = find_vma_intersection(mm, addr, end);
++ if (!vma)
++ return 0;
++
++ nr_pages = (min(end, vma->vm_end) -
++ max(addr, vma->vm_start)) >> PAGE_SHIFT;
++
++ /* Iterate over the rest of the overlaps */
++ for (vma = vma->vm_next; vma; vma = vma->vm_next) {
++ unsigned long overlap_len;
++
++ if (vma->vm_start > end)
++ break;
++
++ overlap_len = min(end, vma->vm_end) - vma->vm_start;
++ nr_pages += overlap_len >> PAGE_SHIFT;
++ }
++
++ return nr_pages;
++}
++
+ void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma,
+ struct rb_node **rb_link, struct rb_node *rb_parent)
+ {
+@@ -1245,6 +1274,23 @@ unsigned long mmap_region(struct file *f
+ unsigned long charged = 0;
+ struct inode *inode = file ? file->f_path.dentry->d_inode : NULL;
+
++ /* Check against address space limit. */
++ if (!may_expand_vm(mm, len >> PAGE_SHIFT)) {
++ unsigned long nr_pages;
++
++ /*
++ * MAP_FIXED may remove pages of mappings that intersects with
++ * requested mapping. Account for the pages it would unmap.
++ */
++ if (!(vm_flags & MAP_FIXED))
++ return -ENOMEM;
++
++ nr_pages = count_vma_pages_range(mm, addr, addr + len);
++
++ if (!may_expand_vm(mm, (len >> PAGE_SHIFT) - nr_pages))
++ return -ENOMEM;
++ }
++
+ /* Clear old maps */
+ error = -ENOMEM;
+ munmap_back:
+@@ -1255,10 +1301,6 @@ munmap_back:
+ goto munmap_back;
+ }
+
+- /* Check against address space limit. */
+- if (!may_expand_vm(mm, len >> PAGE_SHIFT))
+- return -ENOMEM;
+-
+ /*
+ * Set 'VM_NORESERVE' if we should not account for the
+ * memory use of this mapping.