Merge branch 'for-linus-unmerged' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / arch / sparc / kernel / sys_sparc_64.c
index f836f4e..96082d3 100644 (file)
@@ -360,20 +360,25 @@ unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, u
 }
 EXPORT_SYMBOL(get_fb_unmapped_area);
 
-/* Essentially the same as PowerPC... */
-void arch_pick_mmap_layout(struct mm_struct *mm)
+/* Essentially the same as PowerPC.  */
+static unsigned long mmap_rnd(void)
 {
-       unsigned long random_factor = 0UL;
-       unsigned long gap;
+       unsigned long rnd = 0UL;
 
        if (current->flags & PF_RANDOMIZE) {
-               random_factor = get_random_int();
+               unsigned long val = get_random_int();
                if (test_thread_flag(TIF_32BIT))
-                       random_factor &= ((1 * 1024 * 1024) - 1);
+                       rnd = (val % (1UL << (22UL-PAGE_SHIFT)));
                else
-                       random_factor = ((random_factor << PAGE_SHIFT) &
-                                        0xffffffffUL);
+                       rnd = (val % (1UL << (29UL-PAGE_SHIFT)));
        }
+       return (rnd << PAGE_SHIFT) * 2;
+}
+
+void arch_pick_mmap_layout(struct mm_struct *mm)
+{
+       unsigned long random_factor = mmap_rnd();
+       unsigned long gap;
 
        /*
         * Fall back to the standard layout if the personality