summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Kumar <dkumar@codeaurora.org>2017-06-20 16:06:52 +0530
committerDeepak Kumar <dkumar@codeaurora.org>2017-06-21 14:35:26 +0530
commite8adb4c2b80a8455ff9a8a6fe5dbe2ab142d7cef (patch)
tree6a785a7c2727fc5ba6ac2c1bef21d9efb5f0a438
parent9725c4d90bee3b0be78bb1fdc084df1ec08d7d24 (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.c13
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 {
/*