* [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).