linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] zsmalloc: drop unused member 'mapping_area->huge'
@ 2016-02-17  1:56 YiPing Xu
  2016-02-17  2:26 ` Sergey Senozhatsky
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: YiPing Xu @ 2016-02-17  1:56 UTC (permalink / raw)
  To: xuyiping, minchan, ngupta, sergey.senozhatsky.work, linux-mm,
	linux-kernel
  Cc: suzhuangluan, puck.chen, dan.zhao

When unmapping a huge class page in zs_unmap_object, the page will
be unmapped by kmap_atomic. the "!area->huge" branch in
__zs_unmap_object is alway true, and no code set "area->huge" now,
so we can drop it.

Signed-off-by: YiPing Xu <xuyiping@huawei.com>
---
 mm/zsmalloc.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index 2d7c4c1..43e4cbc 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -281,7 +281,6 @@ struct mapping_area {
 #endif
 	char *vm_addr; /* address of kmap_atomic()'ed pages */
 	enum zs_mapmode vm_mm; /* mapping mode */
-	bool huge;
 };
 
 static int create_handle_cache(struct zs_pool *pool)
@@ -1127,11 +1126,9 @@ static void __zs_unmap_object(struct mapping_area *area,
 		goto out;
 
 	buf = area->vm_buf;
-	if (!area->huge) {
-		buf = buf + ZS_HANDLE_SIZE;
-		size -= ZS_HANDLE_SIZE;
-		off += ZS_HANDLE_SIZE;
-	}
+	buf = buf + ZS_HANDLE_SIZE;
+	size -= ZS_HANDLE_SIZE;
+	off += ZS_HANDLE_SIZE;
 
 	sizes[0] = PAGE_SIZE - off;
 	sizes[1] = size - sizes[0];
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] zsmalloc: drop unused member 'mapping_area->huge'
  2016-02-17  1:56 [PATCH] zsmalloc: drop unused member 'mapping_area->huge' YiPing Xu
@ 2016-02-17  2:26 ` Sergey Senozhatsky
  2016-02-17  3:29   ` xuyiping
  2016-02-17  5:20 ` Sergey Senozhatsky
  2016-02-17 15:37 ` Minchan Kim
  2 siblings, 1 reply; 6+ messages in thread
From: Sergey Senozhatsky @ 2016-02-17  2:26 UTC (permalink / raw)
  To: YiPing Xu
  Cc: minchan, ngupta, sergey.senozhatsky.work, linux-mm, linux-kernel,
	suzhuangluan, puck.chen, dan.zhao

Hello,

On (02/17/16 09:56), YiPing Xu wrote:
>  static int create_handle_cache(struct zs_pool *pool)
> @@ -1127,11 +1126,9 @@ static void __zs_unmap_object(struct mapping_area *area,
>  		goto out;
>  
>  	buf = area->vm_buf;
> -	if (!area->huge) {
> -		buf = buf + ZS_HANDLE_SIZE;
> -		size -= ZS_HANDLE_SIZE;
> -		off += ZS_HANDLE_SIZE;
> -	}
> +	buf = buf + ZS_HANDLE_SIZE;
> +	size -= ZS_HANDLE_SIZE;
> +	off += ZS_HANDLE_SIZE;
>  
>  	sizes[0] = PAGE_SIZE - off;
>  	sizes[1] = size - sizes[0];


hm, indeed.

shouldn't it depend on class->huge?

void *zs_map_object()
{
	void *ret = __zs_map_object(area, pages, off, class->size);

	if (!class->huge)
		ret += ZS_HANDLE_SIZE;  /* area->vm_buf + ZS_HANDLE_SIZE */

	return ret;
}

static void __zs_unmap_object(struct mapping_area *area...)
{
	char *buf = area->vm_buf;

	/* handle is in page->private for class->huge */

	buf = buf + ZS_HANDLE_SIZE;
	size -= ZS_HANDLE_SIZE;
	off += ZS_HANDLE_SIZE;

	memcpy(..);
}

	-ss

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] zsmalloc: drop unused member 'mapping_area->huge'
  2016-02-17  2:26 ` Sergey Senozhatsky
@ 2016-02-17  3:29   ` xuyiping
  2016-02-17  3:55     ` Sergey Senozhatsky
  0 siblings, 1 reply; 6+ messages in thread
From: xuyiping @ 2016-02-17  3:29 UTC (permalink / raw)
  To: Sergey Senozhatsky, YiPing Xu
  Cc: minchan, ngupta, linux-mm, linux-kernel, suzhuangluan, puck.chen,
	dan.zhao

HI, Sergery

On 2016/2/17 10:26, Sergey Senozhatsky wrote:
> Hello,
>
> On (02/17/16 09:56), YiPing Xu wrote:
>>   static int create_handle_cache(struct zs_pool *pool)
>> @@ -1127,11 +1126,9 @@ static void __zs_unmap_object(struct mapping_area *area,
>>   		goto out;
>>
>>   	buf = area->vm_buf;
>> -	if (!area->huge) {
>> -		buf = buf + ZS_HANDLE_SIZE;
>> -		size -= ZS_HANDLE_SIZE;
>> -		off += ZS_HANDLE_SIZE;
>> -	}
>> +	buf = buf + ZS_HANDLE_SIZE;
>> +	size -= ZS_HANDLE_SIZE;
>> +	off += ZS_HANDLE_SIZE;
>>
>>   	sizes[0] = PAGE_SIZE - off;
>>   	sizes[1] = size - sizes[0];
>
>
> hm, indeed.
>
> shouldn't it depend on class->huge?
>
> void *zs_map_object()
> {

	if (off + class->size <= PAGE_SIZE) {

for huge object, the code will get into this branch, there is no more 
huge object process in __zs_map_object.

		/* this object is contained entirely within a page */
		area->vm_addr = kmap_atomic(page);
		ret = area->vm_addr + off;
		goto out;
	}


> 	void *ret = __zs_map_object(area, pages, off, class->size);
>
> 	if (!class->huge)
> 		ret += ZS_HANDLE_SIZE;  /* area->vm_buf + ZS_HANDLE_SIZE */
>
> 	return ret;
> }

void zs_unmap_object(struct zs_pool *pool, unsigned long handle)
{
	..

	area = this_cpu_ptr(&zs_map_area);
	if (off + class->size <= PAGE_SIZE)

for huge object, the code will get into this branch, so, in 
__zs_unmap_object there is no depend on class->huge.

it is a little implicated here.

		kunmap_atomic(area->vm_addr);
	else {
		struct page *pages[2];

		pages[0] = page;
		pages[1] = get_next_page(page);
		BUG_ON(!pages[1]);

		__zs_unmap_object(area, pages, off, class->size);
	}

	..
}


> static void __zs_unmap_object(struct mapping_area *area...)
> {
> 	char *buf = area->vm_buf;
>
> 	/* handle is in page->private for class->huge */
>
> 	buf = buf + ZS_HANDLE_SIZE;
> 	size -= ZS_HANDLE_SIZE;
> 	off += ZS_HANDLE_SIZE;
>
> 	memcpy(..);
> }
>
> 	-ss
>
> .
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] zsmalloc: drop unused member 'mapping_area->huge'
  2016-02-17  3:29   ` xuyiping
@ 2016-02-17  3:55     ` Sergey Senozhatsky
  0 siblings, 0 replies; 6+ messages in thread
From: Sergey Senozhatsky @ 2016-02-17  3:55 UTC (permalink / raw)
  To: xuyiping
  Cc: Sergey Senozhatsky, YiPing Xu, minchan, ngupta, linux-mm,
	linux-kernel, suzhuangluan, puck.chen, dan.zhao

On (02/17/16 11:29), xuyiping wrote:
[..]
> 
> 	if (off + class->size <= PAGE_SIZE) {
> 
> for huge object, the code will get into this branch, there is no more huge
> object process in __zs_map_object.

correct, well, techically, it's not about huge objects, but objects that span
page boundaries. we can have objects of pretty small sizes being split between
pages, for example size:1536 and offset:3072, etc.

	-ss

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] zsmalloc: drop unused member 'mapping_area->huge'
  2016-02-17  1:56 [PATCH] zsmalloc: drop unused member 'mapping_area->huge' YiPing Xu
  2016-02-17  2:26 ` Sergey Senozhatsky
@ 2016-02-17  5:20 ` Sergey Senozhatsky
  2016-02-17 15:37 ` Minchan Kim
  2 siblings, 0 replies; 6+ messages in thread
From: Sergey Senozhatsky @ 2016-02-17  5:20 UTC (permalink / raw)
  To: YiPing Xu
  Cc: minchan, ngupta, sergey.senozhatsky.work, linux-mm, linux-kernel,
	suzhuangluan, puck.chen, dan.zhao, Andrew Morton

On (02/17/16 09:56), YiPing Xu wrote:
> When unmapping a huge class page in zs_unmap_object, the page will
> be unmapped by kmap_atomic. the "!area->huge" branch in
> __zs_unmap_object is alway true, and no code set "area->huge" now,
> so we can drop it.
> 

the patch looks good to me, thanks.
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>

	-ss

> Signed-off-by: YiPing Xu <xuyiping@huawei.com>
> ---
>  mm/zsmalloc.c | 9 +++------
>  1 file changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
> index 2d7c4c1..43e4cbc 100644
> --- a/mm/zsmalloc.c
> +++ b/mm/zsmalloc.c
> @@ -281,7 +281,6 @@ struct mapping_area {
>  #endif
>  	char *vm_addr; /* address of kmap_atomic()'ed pages */
>  	enum zs_mapmode vm_mm; /* mapping mode */
> -	bool huge;
>  };
>  
>  static int create_handle_cache(struct zs_pool *pool)
> @@ -1127,11 +1126,9 @@ static void __zs_unmap_object(struct mapping_area *area,
>  		goto out;
>  
>  	buf = area->vm_buf;
> -	if (!area->huge) {
> -		buf = buf + ZS_HANDLE_SIZE;
> -		size -= ZS_HANDLE_SIZE;
> -		off += ZS_HANDLE_SIZE;
> -	}
> +	buf = buf + ZS_HANDLE_SIZE;
> +	size -= ZS_HANDLE_SIZE;
> +	off += ZS_HANDLE_SIZE;
>  
>  	sizes[0] = PAGE_SIZE - off;
>  	sizes[1] = size - sizes[0];
> -- 
> 1.8.3.2
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] zsmalloc: drop unused member 'mapping_area->huge'
  2016-02-17  1:56 [PATCH] zsmalloc: drop unused member 'mapping_area->huge' YiPing Xu
  2016-02-17  2:26 ` Sergey Senozhatsky
  2016-02-17  5:20 ` Sergey Senozhatsky
@ 2016-02-17 15:37 ` Minchan Kim
  2 siblings, 0 replies; 6+ messages in thread
From: Minchan Kim @ 2016-02-17 15:37 UTC (permalink / raw)
  To: YiPing Xu
  Cc: ngupta, sergey.senozhatsky.work, linux-mm, linux-kernel,
	suzhuangluan, puck.chen, dan.zhao

On Wed, Feb 17, 2016 at 09:56:39AM +0800, YiPing Xu wrote:
> When unmapping a huge class page in zs_unmap_object, the page will
> be unmapped by kmap_atomic. the "!area->huge" branch in
> __zs_unmap_object is alway true, and no code set "area->huge" now,
> so we can drop it.
> 
> Signed-off-by: YiPing Xu <xuyiping@huawei.com>
Acked-by: Minchan Kim <minchan@kernel.org>

Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-02-17 15:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-17  1:56 [PATCH] zsmalloc: drop unused member 'mapping_area->huge' YiPing Xu
2016-02-17  2:26 ` Sergey Senozhatsky
2016-02-17  3:29   ` xuyiping
2016-02-17  3:55     ` Sergey Senozhatsky
2016-02-17  5:20 ` Sergey Senozhatsky
2016-02-17 15:37 ` Minchan Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).