Loading mm/zsmalloc.c +26 −24 Original line number Diff line number Diff line Loading @@ -569,7 +569,7 @@ static const struct file_operations zs_stat_size_ops = { .release = single_release, }; static int zs_pool_stat_create(const char *name, struct zs_pool *pool) static int zs_pool_stat_create(struct zs_pool *pool, const char *name) { struct dentry *entry; Loading Loading @@ -609,7 +609,7 @@ static void __exit zs_stat_exit(void) { } static inline int zs_pool_stat_create(const char *name, struct zs_pool *pool) static inline int zs_pool_stat_create(struct zs_pool *pool, const char *name) { return 0; } Loading Loading @@ -655,8 +655,9 @@ static enum fullness_group get_fullness_group(struct page *first_page) * have. This functions inserts the given zspage into the freelist * identified by <class, fullness_group>. */ static void insert_zspage(struct page *first_page, struct size_class *class, enum fullness_group fullness) static void insert_zspage(struct size_class *class, enum fullness_group fullness, struct page *first_page) { struct page **head; Loading Loading @@ -687,8 +688,9 @@ static void insert_zspage(struct page *first_page, struct size_class *class, * This function removes the given zspage from the freelist identified * by <class, fullness_group>. */ static void remove_zspage(struct page *first_page, struct size_class *class, enum fullness_group fullness) static void remove_zspage(struct size_class *class, enum fullness_group fullness, struct page *first_page) { struct page **head; Loading Loading @@ -730,8 +732,8 @@ static enum fullness_group fix_fullness_group(struct size_class *class, if (newfg == currfg) goto out; remove_zspage(first_page, class, currfg); insert_zspage(first_page, class, newfg); remove_zspage(class, currfg, first_page); insert_zspage(class, newfg, first_page); set_zspage_mapping(first_page, class_idx, newfg); out: Loading Loading @@ -915,7 +917,7 @@ static void free_zspage(struct page *first_page) } /* Initialize a newly allocated zspage */ static void init_zspage(struct page *first_page, struct size_class *class) static void init_zspage(struct size_class *class, struct page *first_page) { unsigned long off = 0; struct page *page = first_page; Loading Loading @@ -1003,7 +1005,7 @@ static struct page *alloc_zspage(struct size_class *class, gfp_t flags) prev_page = page; } init_zspage(first_page, class); init_zspage(class, first_page); first_page->freelist = location_to_obj(first_page, 0); /* Maximum number of objects we can store in this zspage */ Loading Loading @@ -1348,8 +1350,8 @@ void zs_unmap_object(struct zs_pool *pool, unsigned long handle) } EXPORT_SYMBOL_GPL(zs_unmap_object); static unsigned long obj_malloc(struct page *first_page, struct size_class *class, unsigned long handle) static unsigned long obj_malloc(struct size_class *class, struct page *first_page, unsigned long handle) { unsigned long obj; struct link_free *link; Loading Loading @@ -1426,7 +1428,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size) class->size, class->pages_per_zspage)); } obj = obj_malloc(first_page, class, handle); obj = obj_malloc(class, first_page, handle); /* Now move the zspage to another fullness group, if required */ fix_fullness_group(class, first_page); record_obj(handle, obj); Loading Loading @@ -1499,8 +1501,8 @@ void zs_free(struct zs_pool *pool, unsigned long handle) } EXPORT_SYMBOL_GPL(zs_free); static void zs_object_copy(unsigned long dst, unsigned long src, struct size_class *class) static void zs_object_copy(struct size_class *class, unsigned long dst, unsigned long src) { struct page *s_page, *d_page; unsigned long s_objidx, d_objidx; Loading Loading @@ -1566,8 +1568,8 @@ static void zs_object_copy(unsigned long dst, unsigned long src, * Find alloced object in zspage from index object and * return handle. */ static unsigned long find_alloced_obj(struct page *page, int index, struct size_class *class) static unsigned long find_alloced_obj(struct size_class *class, struct page *page, int index) { unsigned long head; int offset = 0; Loading Loading @@ -1617,7 +1619,7 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class, int ret = 0; while (1) { handle = find_alloced_obj(s_page, index, class); handle = find_alloced_obj(class, s_page, index); if (!handle) { s_page = get_next_page(s_page); if (!s_page) Loading @@ -1634,8 +1636,8 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class, } used_obj = handle_to_obj(handle); free_obj = obj_malloc(d_page, class, handle); zs_object_copy(free_obj, used_obj, class); free_obj = obj_malloc(class, d_page, handle); zs_object_copy(class, free_obj, used_obj); index++; /* * record_obj updates handle's value to free_obj and it will Loading Loading @@ -1664,7 +1666,7 @@ static struct page *isolate_target_page(struct size_class *class) for (i = 0; i < _ZS_NR_FULLNESS_GROUPS; i++) { page = class->fullness_list[i]; if (page) { remove_zspage(page, class, i); remove_zspage(class, i, page); break; } } Loading @@ -1687,7 +1689,7 @@ static enum fullness_group putback_zspage(struct zs_pool *pool, enum fullness_group fullness; fullness = get_fullness_group(first_page); insert_zspage(first_page, class, fullness); insert_zspage(class, fullness, first_page); set_zspage_mapping(first_page, class->index, fullness); if (fullness == ZS_EMPTY) { Loading @@ -1712,7 +1714,7 @@ static struct page *isolate_source_page(struct size_class *class) if (!page) continue; remove_zspage(page, class, i); remove_zspage(class, i, page); break; } Loading Loading @@ -1949,7 +1951,7 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags) pool->flags = flags; if (zs_pool_stat_create(name, pool)) if (zs_pool_stat_create(pool, name)) goto err; /* Loading Loading
mm/zsmalloc.c +26 −24 Original line number Diff line number Diff line Loading @@ -569,7 +569,7 @@ static const struct file_operations zs_stat_size_ops = { .release = single_release, }; static int zs_pool_stat_create(const char *name, struct zs_pool *pool) static int zs_pool_stat_create(struct zs_pool *pool, const char *name) { struct dentry *entry; Loading Loading @@ -609,7 +609,7 @@ static void __exit zs_stat_exit(void) { } static inline int zs_pool_stat_create(const char *name, struct zs_pool *pool) static inline int zs_pool_stat_create(struct zs_pool *pool, const char *name) { return 0; } Loading Loading @@ -655,8 +655,9 @@ static enum fullness_group get_fullness_group(struct page *first_page) * have. This functions inserts the given zspage into the freelist * identified by <class, fullness_group>. */ static void insert_zspage(struct page *first_page, struct size_class *class, enum fullness_group fullness) static void insert_zspage(struct size_class *class, enum fullness_group fullness, struct page *first_page) { struct page **head; Loading Loading @@ -687,8 +688,9 @@ static void insert_zspage(struct page *first_page, struct size_class *class, * This function removes the given zspage from the freelist identified * by <class, fullness_group>. */ static void remove_zspage(struct page *first_page, struct size_class *class, enum fullness_group fullness) static void remove_zspage(struct size_class *class, enum fullness_group fullness, struct page *first_page) { struct page **head; Loading Loading @@ -730,8 +732,8 @@ static enum fullness_group fix_fullness_group(struct size_class *class, if (newfg == currfg) goto out; remove_zspage(first_page, class, currfg); insert_zspage(first_page, class, newfg); remove_zspage(class, currfg, first_page); insert_zspage(class, newfg, first_page); set_zspage_mapping(first_page, class_idx, newfg); out: Loading Loading @@ -915,7 +917,7 @@ static void free_zspage(struct page *first_page) } /* Initialize a newly allocated zspage */ static void init_zspage(struct page *first_page, struct size_class *class) static void init_zspage(struct size_class *class, struct page *first_page) { unsigned long off = 0; struct page *page = first_page; Loading Loading @@ -1003,7 +1005,7 @@ static struct page *alloc_zspage(struct size_class *class, gfp_t flags) prev_page = page; } init_zspage(first_page, class); init_zspage(class, first_page); first_page->freelist = location_to_obj(first_page, 0); /* Maximum number of objects we can store in this zspage */ Loading Loading @@ -1348,8 +1350,8 @@ void zs_unmap_object(struct zs_pool *pool, unsigned long handle) } EXPORT_SYMBOL_GPL(zs_unmap_object); static unsigned long obj_malloc(struct page *first_page, struct size_class *class, unsigned long handle) static unsigned long obj_malloc(struct size_class *class, struct page *first_page, unsigned long handle) { unsigned long obj; struct link_free *link; Loading Loading @@ -1426,7 +1428,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size) class->size, class->pages_per_zspage)); } obj = obj_malloc(first_page, class, handle); obj = obj_malloc(class, first_page, handle); /* Now move the zspage to another fullness group, if required */ fix_fullness_group(class, first_page); record_obj(handle, obj); Loading Loading @@ -1499,8 +1501,8 @@ void zs_free(struct zs_pool *pool, unsigned long handle) } EXPORT_SYMBOL_GPL(zs_free); static void zs_object_copy(unsigned long dst, unsigned long src, struct size_class *class) static void zs_object_copy(struct size_class *class, unsigned long dst, unsigned long src) { struct page *s_page, *d_page; unsigned long s_objidx, d_objidx; Loading Loading @@ -1566,8 +1568,8 @@ static void zs_object_copy(unsigned long dst, unsigned long src, * Find alloced object in zspage from index object and * return handle. */ static unsigned long find_alloced_obj(struct page *page, int index, struct size_class *class) static unsigned long find_alloced_obj(struct size_class *class, struct page *page, int index) { unsigned long head; int offset = 0; Loading Loading @@ -1617,7 +1619,7 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class, int ret = 0; while (1) { handle = find_alloced_obj(s_page, index, class); handle = find_alloced_obj(class, s_page, index); if (!handle) { s_page = get_next_page(s_page); if (!s_page) Loading @@ -1634,8 +1636,8 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class, } used_obj = handle_to_obj(handle); free_obj = obj_malloc(d_page, class, handle); zs_object_copy(free_obj, used_obj, class); free_obj = obj_malloc(class, d_page, handle); zs_object_copy(class, free_obj, used_obj); index++; /* * record_obj updates handle's value to free_obj and it will Loading Loading @@ -1664,7 +1666,7 @@ static struct page *isolate_target_page(struct size_class *class) for (i = 0; i < _ZS_NR_FULLNESS_GROUPS; i++) { page = class->fullness_list[i]; if (page) { remove_zspage(page, class, i); remove_zspage(class, i, page); break; } } Loading @@ -1687,7 +1689,7 @@ static enum fullness_group putback_zspage(struct zs_pool *pool, enum fullness_group fullness; fullness = get_fullness_group(first_page); insert_zspage(first_page, class, fullness); insert_zspage(class, fullness, first_page); set_zspage_mapping(first_page, class->index, fullness); if (fullness == ZS_EMPTY) { Loading @@ -1712,7 +1714,7 @@ static struct page *isolate_source_page(struct size_class *class) if (!page) continue; remove_zspage(page, class, i); remove_zspage(class, i, page); break; } Loading Loading @@ -1949,7 +1951,7 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags) pool->flags = flags; if (zs_pool_stat_create(name, pool)) if (zs_pool_stat_create(pool, name)) goto err; /* Loading