Loading mm/zsmalloc.c +15 −27 Original line number Diff line number Diff line Loading @@ -418,7 +418,7 @@ static void get_zspage_mapping(struct page *first_page, enum fullness_group *fullness) { unsigned long m; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); m = (unsigned long)first_page->mapping; *fullness = m & FULLNESS_MASK; Loading @@ -430,7 +430,7 @@ static void set_zspage_mapping(struct page *first_page, enum fullness_group fullness) { unsigned long m; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); m = ((class_idx & CLASS_IDX_MASK) << FULLNESS_BITS) | (fullness & FULLNESS_MASK); Loading Loading @@ -631,7 +631,8 @@ static enum fullness_group get_fullness_group(struct page *first_page) { int inuse, max_objects; enum fullness_group fg; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); inuse = first_page->inuse; max_objects = first_page->objects; Loading Loading @@ -659,7 +660,7 @@ static void insert_zspage(struct page *first_page, struct size_class *class, { struct page **head; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); if (fullness >= _ZS_NR_FULLNESS_GROUPS) return; Loading Loading @@ -691,13 +692,13 @@ static void remove_zspage(struct page *first_page, struct size_class *class, { struct page **head; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); if (fullness >= _ZS_NR_FULLNESS_GROUPS) return; head = &class->fullness_list[fullness]; BUG_ON(!*head); VM_BUG_ON_PAGE(!*head, first_page); if (list_empty(&(*head)->lru)) *head = NULL; else if (*head == first_page) Loading @@ -724,8 +725,6 @@ static enum fullness_group fix_fullness_group(struct size_class *class, int class_idx; enum fullness_group currfg, newfg; BUG_ON(!is_first_page(first_page)); get_zspage_mapping(first_page, &class_idx, &currfg); newfg = get_fullness_group(first_page); if (newfg == currfg) Loading Loading @@ -811,7 +810,7 @@ static void *location_to_obj(struct page *page, unsigned long obj_idx) unsigned long obj; if (!page) { BUG_ON(obj_idx); VM_BUG_ON(obj_idx); return NULL; } Loading Loading @@ -844,7 +843,7 @@ static unsigned long obj_to_head(struct size_class *class, struct page *page, void *obj) { if (class->huge) { VM_BUG_ON(!is_first_page(page)); VM_BUG_ON_PAGE(!is_first_page(page), page); return page_private(page); } else return *(unsigned long *)obj; Loading Loading @@ -894,8 +893,8 @@ static void free_zspage(struct page *first_page) { struct page *nextp, *tmp, *head_extra; BUG_ON(!is_first_page(first_page)); BUG_ON(first_page->inuse); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); VM_BUG_ON_PAGE(first_page->inuse, first_page); head_extra = (struct page *)page_private(first_page); Loading @@ -921,7 +920,8 @@ static void init_zspage(struct page *first_page, struct size_class *class) unsigned long off = 0; struct page *page = first_page; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); while (page) { struct page *next_page; struct link_free *link; Loading Loading @@ -1238,7 +1238,7 @@ static bool can_merge(struct size_class *prev, int size, int pages_per_zspage) static bool zspage_full(struct page *first_page) { BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); return first_page->inuse == first_page->objects; } Loading Loading @@ -1276,14 +1276,12 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle, struct page *pages[2]; void *ret; BUG_ON(!handle); /* * Because we use per-cpu mapping areas shared among the * pools/users, we can't allow mapping in interrupt context * because it can corrupt another users mappings. */ BUG_ON(in_interrupt()); WARN_ON_ONCE(in_interrupt()); /* From now on, migration cannot move the object */ pin_tag(handle); Loading Loading @@ -1327,8 +1325,6 @@ void zs_unmap_object(struct zs_pool *pool, unsigned long handle) struct size_class *class; struct mapping_area *area; BUG_ON(!handle); obj = handle_to_obj(handle); obj_to_location(obj, &page, &obj_idx); get_zspage_mapping(get_first_page(page), &class_idx, &fg); Loading Loading @@ -1448,8 +1444,6 @@ static void obj_free(struct zs_pool *pool, struct size_class *class, unsigned long f_objidx, f_offset; void *vaddr; BUG_ON(!obj); obj &= ~OBJ_ALLOCATED_TAG; obj_to_location(obj, &f_page, &f_objidx); first_page = get_first_page(f_page); Loading Loading @@ -1549,7 +1543,6 @@ static void zs_object_copy(unsigned long dst, unsigned long src, kunmap_atomic(d_addr); kunmap_atomic(s_addr); s_page = get_next_page(s_page); BUG_ON(!s_page); s_addr = kmap_atomic(s_page); d_addr = kmap_atomic(d_page); s_size = class->size - written; Loading @@ -1559,7 +1552,6 @@ static void zs_object_copy(unsigned long dst, unsigned long src, if (d_off >= PAGE_SIZE) { kunmap_atomic(d_addr); d_page = get_next_page(d_page); BUG_ON(!d_page); d_addr = kmap_atomic(d_page); d_size = class->size - written; d_off = 0; Loading Loading @@ -1694,8 +1686,6 @@ static enum fullness_group putback_zspage(struct zs_pool *pool, { enum fullness_group fullness; BUG_ON(!is_first_page(first_page)); fullness = get_fullness_group(first_page); insert_zspage(first_page, class, fullness); set_zspage_mapping(first_page, class->index, fullness); Loading Loading @@ -1759,8 +1749,6 @@ static void __zs_compact(struct zs_pool *pool, struct size_class *class) spin_lock(&class->lock); while ((src_page = isolate_source_page(class))) { BUG_ON(!is_first_page(src_page)); if (!zs_can_compact(class)) break; Loading Loading
mm/zsmalloc.c +15 −27 Original line number Diff line number Diff line Loading @@ -418,7 +418,7 @@ static void get_zspage_mapping(struct page *first_page, enum fullness_group *fullness) { unsigned long m; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); m = (unsigned long)first_page->mapping; *fullness = m & FULLNESS_MASK; Loading @@ -430,7 +430,7 @@ static void set_zspage_mapping(struct page *first_page, enum fullness_group fullness) { unsigned long m; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); m = ((class_idx & CLASS_IDX_MASK) << FULLNESS_BITS) | (fullness & FULLNESS_MASK); Loading Loading @@ -631,7 +631,8 @@ static enum fullness_group get_fullness_group(struct page *first_page) { int inuse, max_objects; enum fullness_group fg; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); inuse = first_page->inuse; max_objects = first_page->objects; Loading Loading @@ -659,7 +660,7 @@ static void insert_zspage(struct page *first_page, struct size_class *class, { struct page **head; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); if (fullness >= _ZS_NR_FULLNESS_GROUPS) return; Loading Loading @@ -691,13 +692,13 @@ static void remove_zspage(struct page *first_page, struct size_class *class, { struct page **head; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); if (fullness >= _ZS_NR_FULLNESS_GROUPS) return; head = &class->fullness_list[fullness]; BUG_ON(!*head); VM_BUG_ON_PAGE(!*head, first_page); if (list_empty(&(*head)->lru)) *head = NULL; else if (*head == first_page) Loading @@ -724,8 +725,6 @@ static enum fullness_group fix_fullness_group(struct size_class *class, int class_idx; enum fullness_group currfg, newfg; BUG_ON(!is_first_page(first_page)); get_zspage_mapping(first_page, &class_idx, &currfg); newfg = get_fullness_group(first_page); if (newfg == currfg) Loading Loading @@ -811,7 +810,7 @@ static void *location_to_obj(struct page *page, unsigned long obj_idx) unsigned long obj; if (!page) { BUG_ON(obj_idx); VM_BUG_ON(obj_idx); return NULL; } Loading Loading @@ -844,7 +843,7 @@ static unsigned long obj_to_head(struct size_class *class, struct page *page, void *obj) { if (class->huge) { VM_BUG_ON(!is_first_page(page)); VM_BUG_ON_PAGE(!is_first_page(page), page); return page_private(page); } else return *(unsigned long *)obj; Loading Loading @@ -894,8 +893,8 @@ static void free_zspage(struct page *first_page) { struct page *nextp, *tmp, *head_extra; BUG_ON(!is_first_page(first_page)); BUG_ON(first_page->inuse); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); VM_BUG_ON_PAGE(first_page->inuse, first_page); head_extra = (struct page *)page_private(first_page); Loading @@ -921,7 +920,8 @@ static void init_zspage(struct page *first_page, struct size_class *class) unsigned long off = 0; struct page *page = first_page; BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); while (page) { struct page *next_page; struct link_free *link; Loading Loading @@ -1238,7 +1238,7 @@ static bool can_merge(struct size_class *prev, int size, int pages_per_zspage) static bool zspage_full(struct page *first_page) { BUG_ON(!is_first_page(first_page)); VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); return first_page->inuse == first_page->objects; } Loading Loading @@ -1276,14 +1276,12 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle, struct page *pages[2]; void *ret; BUG_ON(!handle); /* * Because we use per-cpu mapping areas shared among the * pools/users, we can't allow mapping in interrupt context * because it can corrupt another users mappings. */ BUG_ON(in_interrupt()); WARN_ON_ONCE(in_interrupt()); /* From now on, migration cannot move the object */ pin_tag(handle); Loading Loading @@ -1327,8 +1325,6 @@ void zs_unmap_object(struct zs_pool *pool, unsigned long handle) struct size_class *class; struct mapping_area *area; BUG_ON(!handle); obj = handle_to_obj(handle); obj_to_location(obj, &page, &obj_idx); get_zspage_mapping(get_first_page(page), &class_idx, &fg); Loading Loading @@ -1448,8 +1444,6 @@ static void obj_free(struct zs_pool *pool, struct size_class *class, unsigned long f_objidx, f_offset; void *vaddr; BUG_ON(!obj); obj &= ~OBJ_ALLOCATED_TAG; obj_to_location(obj, &f_page, &f_objidx); first_page = get_first_page(f_page); Loading Loading @@ -1549,7 +1543,6 @@ static void zs_object_copy(unsigned long dst, unsigned long src, kunmap_atomic(d_addr); kunmap_atomic(s_addr); s_page = get_next_page(s_page); BUG_ON(!s_page); s_addr = kmap_atomic(s_page); d_addr = kmap_atomic(d_page); s_size = class->size - written; Loading @@ -1559,7 +1552,6 @@ static void zs_object_copy(unsigned long dst, unsigned long src, if (d_off >= PAGE_SIZE) { kunmap_atomic(d_addr); d_page = get_next_page(d_page); BUG_ON(!d_page); d_addr = kmap_atomic(d_page); d_size = class->size - written; d_off = 0; Loading Loading @@ -1694,8 +1686,6 @@ static enum fullness_group putback_zspage(struct zs_pool *pool, { enum fullness_group fullness; BUG_ON(!is_first_page(first_page)); fullness = get_fullness_group(first_page); insert_zspage(first_page, class, fullness); set_zspage_mapping(first_page, class->index, fullness); Loading Loading @@ -1759,8 +1749,6 @@ static void __zs_compact(struct zs_pool *pool, struct size_class *class) spin_lock(&class->lock); while ((src_page = isolate_source_page(class))) { BUG_ON(!is_first_page(src_page)); if (!zs_can_compact(class)) break; Loading