]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm/ttm: Choose a pool to shrink correctly in ttm_dma_pool_shrink_scan().
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Sun, 3 Aug 2014 11:00:40 +0000 (20:00 +0900)
committerJiri Slaby <jslaby@suse.cz>
Thu, 18 Sep 2014 14:39:59 +0000 (16:39 +0200)
commit 46c2df68f03a236b30808bba361f10900c88d95e upstream.

We can use "unsigned int" instead of "atomic_t" by updating start_pool
variable under _manager->lock. This patch will make it possible to avoid
skipping when choosing a pool to shrink in round-robin style, after next
patch changes mutex_lock(_manager->lock) to !mutex_trylock(_manager->lork).

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/gpu/drm/ttm/ttm_page_alloc_dma.c

index eeb8527aba90bf938eb2632ef6fac6ba590cd558..5d49274afd0e72b3172b5715b789e5e1b0554569 100644 (file)
@@ -1003,9 +1003,9 @@ EXPORT_SYMBOL_GPL(ttm_dma_unpopulate);
 static unsigned long
 ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 {
-       static atomic_t start_pool = ATOMIC_INIT(0);
+       static unsigned start_pool;
        unsigned idx = 0;
-       unsigned pool_offset = atomic_add_return(1, &start_pool);
+       unsigned pool_offset;
        unsigned shrink_pages = sc->nr_to_scan;
        struct device_pools *p;
        unsigned long freed = 0;
@@ -1016,7 +1016,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
        mutex_lock(&_manager->lock);
        if (!_manager->npools)
                goto out;
-       pool_offset = pool_offset % _manager->npools;
+       pool_offset = ++start_pool % _manager->npools;
        list_for_each_entry(p, &_manager->pools, pools) {
                unsigned nr_free;