diff options
| author | Deepak Kumar <dkumar@codeaurora.org> | 2017-06-20 16:06:52 +0530 |
|---|---|---|
| committer | Deepak Kumar <dkumar@codeaurora.org> | 2017-06-21 14:35:26 +0530 |
| commit | e8adb4c2b80a8455ff9a8a6fe5dbe2ab142d7cef (patch) | |
| tree | 6a785a7c2727fc5ba6ac2c1bef21d9efb5f0a438 | |
| parent | 9725c4d90bee3b0be78bb1fdc084df1ec08d7d24 (diff) | |
msm: kgsl: Directly return page size of the supported pool
In current code, if a request comes to allocate a page of a size
for which pool is not supported EAGAIN is returned with a page
size of PAGE_SIZE << --order. This is not efficient as it results
in multiple retries in case pool of size = PAGE_SIZE << --order is
also not supported.
Instead of retrying with lower order page in a sequential manner
this change directly returns the page size of the pool that is
supported.
Change-Id: Ib82ae5be7e4109fdc0a3d72bcbcd4b47cfb2e266
Signed-off-by: Deepak Kumar <dkumar@codeaurora.org>
| -rw-r--r-- | drivers/gpu/msm/kgsl_pool.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/msm/kgsl_pool.c b/drivers/gpu/msm/kgsl_pool.c index bb92b8b79d93..c31a85b07447 100644 --- a/drivers/gpu/msm/kgsl_pool.c +++ b/drivers/gpu/msm/kgsl_pool.c @@ -280,6 +280,17 @@ static int kgsl_pool_idx_lookup(unsigned int order) return -ENOMEM; } +static int kgsl_pool_get_retry_order(unsigned int order) +{ + int i; + + for (i = kgsl_num_pools-1; i > 0; i--) + if (order >= kgsl_pools[i].pool_order) + return kgsl_pools[i].pool_order; + + return 0; +} + /** * kgsl_pool_alloc_page() - Allocate a page of requested size * @page_size: Size of the page to be allocated @@ -326,7 +337,7 @@ int kgsl_pool_alloc_page(int *page_size, struct page **pages, if (pool == NULL) { /* Retry with lower order pages */ if (order > 0) { - size = PAGE_SIZE << --order; + size = PAGE_SIZE << kgsl_pool_get_retry_order(order); goto eagain; } else { /* |
