Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf675acb authored by Ganesh Mahendran's avatar Ganesh Mahendran Committed by Linus Torvalds
Browse files

mm/zsmalloc: take obj index back from find_alloced_obj

the obj index value should be updated after return from
find_alloced_obj() to avoid CPU burning caused by unnecessary object
scanning.

Link: http://lkml.kernel.org/r/1467882338-4300-2-git-send-email-opensource.ganesh@gmail.com


Signed-off-by: default avatarGanesh Mahendran <opensource.ganesh@gmail.com>
Reviewed-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: default avatarMinchan Kim <minchan@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 41b88e14
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1741,10 +1741,11 @@ static void zs_object_copy(struct size_class *class, unsigned long dst,
 * return handle.
 */
static unsigned long find_alloced_obj(struct size_class *class,
					struct page *page, int index)
					struct page *page, int *obj_idx)
{
	unsigned long head;
	int offset = 0;
	int index = *obj_idx;
	unsigned long handle = 0;
	void *addr = kmap_atomic(page);

@@ -1765,6 +1766,9 @@ static unsigned long find_alloced_obj(struct size_class *class,
	}

	kunmap_atomic(addr);

	*obj_idx = index;

	return handle;
}

@@ -1790,7 +1794,7 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class,
	int ret = 0;

	while (1) {
		handle = find_alloced_obj(class, s_page, obj_idx);
		handle = find_alloced_obj(class, s_page, &obj_idx);
		if (!handle) {
			s_page = get_next_page(s_page);
			if (!s_page)