mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
mm: cma: Increase retries if less blocks available
If a particular cma region has lesser free blocks then increase retries to avoid allocation failure due to page being temporarily busy. Change-Id: I92021fd75315b266a978f7a5b0235344c800cba2 Signed-off-by: Shiraz Hashim <shashim@codeaurora.org> Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
This commit is contained in:
parent
6135095109
commit
5a883fb75e
1 changed files with 12 additions and 1 deletions
13
mm/cma.c
13
mm/cma.c
|
|
@ -454,6 +454,8 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
|||
struct page *page = NULL;
|
||||
int ret = -ENOMEM;
|
||||
int retry_after_sleep = 0;
|
||||
int max_retries = 2;
|
||||
int available_regions = 0;
|
||||
|
||||
if (!cma || !cma->count)
|
||||
return NULL;
|
||||
|
|
@ -478,8 +480,15 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
|||
bitmap_maxno, start, bitmap_count, mask,
|
||||
offset);
|
||||
if (bitmap_no >= bitmap_maxno) {
|
||||
if (retry_after_sleep < 2) {
|
||||
if (retry_after_sleep < max_retries) {
|
||||
start = 0;
|
||||
/*
|
||||
* update max retries if available free regions
|
||||
* are less.
|
||||
*/
|
||||
if (available_regions < 3)
|
||||
max_retries = 5;
|
||||
available_regions = 0;
|
||||
/*
|
||||
* Page may be momentarily pinned by some other
|
||||
* process which has been scheduled out, eg.
|
||||
|
|
@ -497,6 +506,8 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
available_regions++;
|
||||
bitmap_set(cma->bitmap, bitmap_no, bitmap_count);
|
||||
/*
|
||||
* It's safe to drop the lock here. We've marked this region for
|
||||
|
|
|
|||
Loading…
Reference in a new issue