summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2023-03-01 07:57:33 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2023-03-01 07:57:30 -0800
commit67cbee5bbfcf5fafd18a1a0a64ea40ca1a1b12be (patch)
tree8177bce26975a845138991a74b5de6ad0cf559b8
parent438808d164b53fb3e58e16596abc832adce344bf (diff)
parente2f506a3fadf7310df96a7cd6476fb75459f91d7 (diff)
Merge "msm: kgsl: Make sure that pool pages don't have any extra references"
-rw-r--r--drivers/gpu/msm/kgsl_pool.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/msm/kgsl_pool.c b/drivers/gpu/msm/kgsl_pool.c
index 4a9997b02155..52453e5a0791 100644
--- a/drivers/gpu/msm/kgsl_pool.c
+++ b/drivers/gpu/msm/kgsl_pool.c
@@ -1,4 +1,5 @@
/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -78,6 +79,15 @@ _kgsl_pool_zero_page(struct page *p)
static void
_kgsl_pool_add_page(struct kgsl_page_pool *pool, struct page *p)
{
+ /*
+ * Sanity check to make sure we don't re-pool a page that
+ * somebody else has a reference to.
+ */
+ if (WARN_ON_ONCE(unlikely(page_count(p) > 1))) {
+ __free_pages(p, pool->pool_order);
+ return;
+ }
+
spin_lock(&pool->list_lock);
list_add_tail(&p->lru, &pool->page_list);
pool->page_count++;