|
@@ -317,10 +317,14 @@ bottomup:
|
|
|
unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, unsigned long len, unsigned long pgoff, unsigned long flags)
|
|
|
{
|
|
|
unsigned long align_goal, addr = -ENOMEM;
|
|
|
+ unsigned long (*get_area)(struct file *, unsigned long,
|
|
|
+ unsigned long, unsigned long, unsigned long);
|
|
|
+
|
|
|
+ get_area = current->mm->get_unmapped_area;
|
|
|
|
|
|
if (flags & MAP_FIXED) {
|
|
|
/* Ok, don't mess with it. */
|
|
|
- return get_unmapped_area(NULL, orig_addr, len, pgoff, flags);
|
|
|
+ return get_area(NULL, orig_addr, len, pgoff, flags);
|
|
|
}
|
|
|
flags &= ~MAP_SHARED;
|
|
|
|
|
@@ -333,7 +337,7 @@ unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, u
|
|
|
align_goal = (64UL * 1024);
|
|
|
|
|
|
do {
|
|
|
- addr = get_unmapped_area(NULL, orig_addr, len + (align_goal - PAGE_SIZE), pgoff, flags);
|
|
|
+ addr = get_area(NULL, orig_addr, len + (align_goal - PAGE_SIZE), pgoff, flags);
|
|
|
if (!(addr & ~PAGE_MASK)) {
|
|
|
addr = (addr + (align_goal - 1UL)) & ~(align_goal - 1UL);
|
|
|
break;
|
|
@@ -351,7 +355,7 @@ unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, u
|
|
|
* be obtained.
|
|
|
*/
|
|
|
if (addr & ~PAGE_MASK)
|
|
|
- addr = get_unmapped_area(NULL, orig_addr, len, pgoff, flags);
|
|
|
+ addr = get_area(NULL, orig_addr, len, pgoff, flags);
|
|
|
|
|
|
return addr;
|
|
|
}
|