diff options
author | Ganesh Mahendran <opensource.ganesh@gmail.com> | 2016-07-28 18:47:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-28 19:07:41 -0400 |
commit | b4fd07a0864a06d7a8b20a624d851736330d6fd8 (patch) | |
tree | 9f14c7f02483f2a6e9aa2c24beb0649e1f320d66 | |
parent | cf675acb743f045b7482384be60987e69260e43d (diff) |
mm/zsmalloc: use class->objs_per_zspage to get num of max objects
num of max objects in zspage is stored in each size_class now. So there
is no need to re-calculate it.
Link: http://lkml.kernel.org/r/1467882338-4300-3-git-send-email-opensource.ganesh@gmail.com
Signed-off-by: Ganesh Mahendran <opensource.ganesh@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/zsmalloc.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 49143de9934c..72e0b296984b 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c | |||
@@ -635,8 +635,7 @@ static int zs_stats_size_show(struct seq_file *s, void *v) | |||
635 | freeable = zs_can_compact(class); | 635 | freeable = zs_can_compact(class); |
636 | spin_unlock(&class->lock); | 636 | spin_unlock(&class->lock); |
637 | 637 | ||
638 | objs_per_zspage = get_maxobj_per_zspage(class->size, | 638 | objs_per_zspage = class->objs_per_zspage; |
639 | class->pages_per_zspage); | ||
640 | pages_used = obj_allocated / objs_per_zspage * | 639 | pages_used = obj_allocated / objs_per_zspage * |
641 | class->pages_per_zspage; | 640 | class->pages_per_zspage; |
642 | 641 | ||
@@ -1014,8 +1013,7 @@ static void __free_zspage(struct zs_pool *pool, struct size_class *class, | |||
1014 | 1013 | ||
1015 | cache_free_zspage(pool, zspage); | 1014 | cache_free_zspage(pool, zspage); |
1016 | 1015 | ||
1017 | zs_stat_dec(class, OBJ_ALLOCATED, get_maxobj_per_zspage( | 1016 | zs_stat_dec(class, OBJ_ALLOCATED, class->objs_per_zspage); |
1018 | class->size, class->pages_per_zspage)); | ||
1019 | atomic_long_sub(class->pages_per_zspage, | 1017 | atomic_long_sub(class->pages_per_zspage, |
1020 | &pool->pages_allocated); | 1018 | &pool->pages_allocated); |
1021 | } | 1019 | } |
@@ -1366,7 +1364,7 @@ static bool can_merge(struct size_class *prev, int size, int pages_per_zspage) | |||
1366 | if (prev->pages_per_zspage != pages_per_zspage) | 1364 | if (prev->pages_per_zspage != pages_per_zspage) |
1367 | return false; | 1365 | return false; |
1368 | 1366 | ||
1369 | if (get_maxobj_per_zspage(prev->size, prev->pages_per_zspage) | 1367 | if (prev->objs_per_zspage |
1370 | != get_maxobj_per_zspage(size, pages_per_zspage)) | 1368 | != get_maxobj_per_zspage(size, pages_per_zspage)) |
1371 | return false; | 1369 | return false; |
1372 | 1370 | ||
@@ -1592,8 +1590,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t gfp) | |||
1592 | record_obj(handle, obj); | 1590 | record_obj(handle, obj); |
1593 | atomic_long_add(class->pages_per_zspage, | 1591 | atomic_long_add(class->pages_per_zspage, |
1594 | &pool->pages_allocated); | 1592 | &pool->pages_allocated); |
1595 | zs_stat_inc(class, OBJ_ALLOCATED, get_maxobj_per_zspage( | 1593 | zs_stat_inc(class, OBJ_ALLOCATED, class->objs_per_zspage); |
1596 | class->size, class->pages_per_zspage)); | ||
1597 | 1594 | ||
1598 | /* We completely set up zspage so mark them as movable */ | 1595 | /* We completely set up zspage so mark them as movable */ |
1599 | SetZsPageMovable(pool, zspage); | 1596 | SetZsPageMovable(pool, zspage); |
@@ -2265,8 +2262,7 @@ static unsigned long zs_can_compact(struct size_class *class) | |||
2265 | return 0; | 2262 | return 0; |
2266 | 2263 | ||
2267 | obj_wasted = obj_allocated - obj_used; | 2264 | obj_wasted = obj_allocated - obj_used; |
2268 | obj_wasted /= get_maxobj_per_zspage(class->size, | 2265 | obj_wasted /= class->objs_per_zspage; |
2269 | class->pages_per_zspage); | ||
2270 | 2266 | ||
2271 | return obj_wasted * class->pages_per_zspage; | 2267 | return obj_wasted * class->pages_per_zspage; |
2272 | } | 2268 | } |
@@ -2473,8 +2469,8 @@ struct zs_pool *zs_create_pool(const char *name) | |||
2473 | class->size = size; | 2469 | class->size = size; |
2474 | class->index = i; | 2470 | class->index = i; |
2475 | class->pages_per_zspage = pages_per_zspage; | 2471 | class->pages_per_zspage = pages_per_zspage; |
2476 | class->objs_per_zspage = class->pages_per_zspage * | 2472 | class->objs_per_zspage = get_maxobj_per_zspage(class->size, |
2477 | PAGE_SIZE / class->size; | 2473 | class->pages_per_zspage); |
2478 | spin_lock_init(&class->lock); | 2474 | spin_lock_init(&class->lock); |
2479 | pool->size_class[i] = class; | 2475 | pool->size_class[i] = class; |
2480 | for (fullness = ZS_EMPTY; fullness < NR_ZS_FULLNESS; | 2476 | for (fullness = ZS_EMPTY; fullness < NR_ZS_FULLNESS; |