]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.10.56/drm-ttm-fix-possible-division-by-0-in-ttm_dma_pool_shrink_scan.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 3.10.56 / drm-ttm-fix-possible-division-by-0-in-ttm_dma_pool_shrink_scan.patch
CommitLineData
59e997d5
GKH
1From 11e504cc705e8ccb06ac93a276e11b5e8fee4d40 Mon Sep 17 00:00:00 2001
2From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
3Date: Sun, 3 Aug 2014 19:59:35 +0900
4Subject: drm/ttm: Fix possible division by 0 in ttm_dma_pool_shrink_scan().
5
6From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
7
8commit 11e504cc705e8ccb06ac93a276e11b5e8fee4d40 upstream.
9
10list_empty(&_manager->pools) being false before taking _manager->lock
11does not guarantee that _manager->npools != 0 after taking _manager->lock
12because _manager->npools is updated under _manager->lock.
13
14Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
15Signed-off-by: Dave Airlie <airlied@redhat.com>
16Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
17
18---
19 drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 3 +++
20 1 file changed, 3 insertions(+)
21
22--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
23+++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
24@@ -1016,6 +1016,8 @@ static int ttm_dma_pool_mm_shrink(struct
25 return 0;
26
27 mutex_lock(&_manager->lock);
28+ if (!_manager->npools)
29+ goto out;
30 pool_offset = pool_offset % _manager->npools;
31 list_for_each_entry(p, &_manager->pools, pools) {
32 unsigned nr_free;
33@@ -1033,6 +1035,7 @@ static int ttm_dma_pool_mm_shrink(struct
34 p->pool->dev_name, p->pool->name, current->pid,
35 nr_free, shrink_pages);
36 }
37+out:
38 mutex_unlock(&_manager->lock);
39 /* return estimated number of unused pages in pool */
40 return ttm_dma_pool_get_num_unused_pages();