All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation
@ 2016-09-21  4:26 ` zijun_hu
  0 siblings, 0 replies; 6+ messages in thread
From: zijun_hu @ 2016-09-21  4:26 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, linux-kernel, zijun_hu, tj, mingo, rientjes,
	iamjoonsoo.kim, mgorman

From: zijun_hu <zijun_hu@htc.com>

simplify /proc/vmallocinfo implementation via seq_file helpers
for list_head

Signed-off-by: zijun_hu <zijun_hu@htc.com>
---
 mm/vmalloc.c | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index cc6ecd6..a125ae8 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -2576,32 +2576,13 @@ void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms)
 static void *s_start(struct seq_file *m, loff_t *pos)
 	__acquires(&vmap_area_lock)
 {
-	loff_t n = *pos;
-	struct vmap_area *va;
-
 	spin_lock(&vmap_area_lock);
-	va = list_first_entry(&vmap_area_list, typeof(*va), list);
-	while (n > 0 && &va->list != &vmap_area_list) {
-		n--;
-		va = list_next_entry(va, list);
-	}
-	if (!n && &va->list != &vmap_area_list)
-		return va;
-
-	return NULL;
-
+	return seq_list_start(&vmap_area_list, *pos);
 }
 
 static void *s_next(struct seq_file *m, void *p, loff_t *pos)
 {
-	struct vmap_area *va = p, *next;
-
-	++*pos;
-	next = list_next_entry(va, list);
-	if (&next->list != &vmap_area_list)
-		return next;
-
-	return NULL;
+	return seq_list_next(p, &vmap_area_list, pos);
 }
 
 static void s_stop(struct seq_file *m, void *p)
@@ -2636,9 +2617,11 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
 
 static int s_show(struct seq_file *m, void *p)
 {
-	struct vmap_area *va = p;
+	struct vmap_area *va;
 	struct vm_struct *v;
 
+	va = list_entry((struct list_head *)p, struct vmap_area, list);
+
 	/*
 	 * s_show can encounter race with remove_vm_area, !VM_VM_AREA on
 	 * behalf of vmap area is being tear down or vm_map_ram allocation.
-- 
1.9.1

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

* [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation
@ 2016-09-21  4:26 ` zijun_hu
  0 siblings, 0 replies; 6+ messages in thread
From: zijun_hu @ 2016-09-21  4:26 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, linux-kernel, zijun_hu, tj, mingo, rientjes,
	iamjoonsoo.kim, mgorman

From: zijun_hu <zijun_hu@htc.com>

simplify /proc/vmallocinfo implementation via seq_file helpers
for list_head

Signed-off-by: zijun_hu <zijun_hu@htc.com>
---
 mm/vmalloc.c | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index cc6ecd6..a125ae8 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -2576,32 +2576,13 @@ void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms)
 static void *s_start(struct seq_file *m, loff_t *pos)
 	__acquires(&vmap_area_lock)
 {
-	loff_t n = *pos;
-	struct vmap_area *va;
-
 	spin_lock(&vmap_area_lock);
-	va = list_first_entry(&vmap_area_list, typeof(*va), list);
-	while (n > 0 && &va->list != &vmap_area_list) {
-		n--;
-		va = list_next_entry(va, list);
-	}
-	if (!n && &va->list != &vmap_area_list)
-		return va;
-
-	return NULL;
-
+	return seq_list_start(&vmap_area_list, *pos);
 }
 
 static void *s_next(struct seq_file *m, void *p, loff_t *pos)
 {
-	struct vmap_area *va = p, *next;
-
-	++*pos;
-	next = list_next_entry(va, list);
-	if (&next->list != &vmap_area_list)
-		return next;
-
-	return NULL;
+	return seq_list_next(p, &vmap_area_list, pos);
 }
 
 static void s_stop(struct seq_file *m, void *p)
@@ -2636,9 +2617,11 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
 
 static int s_show(struct seq_file *m, void *p)
 {
-	struct vmap_area *va = p;
+	struct vmap_area *va;
 	struct vm_struct *v;
 
+	va = list_entry((struct list_head *)p, struct vmap_area, list);
+
 	/*
 	 * s_show can encounter race with remove_vm_area, !VM_VM_AREA on
 	 * behalf of vmap area is being tear down or vm_map_ram allocation.
-- 
1.9.1

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation
  2016-09-21  4:26 ` zijun_hu
@ 2016-09-21 21:16   ` David Rientjes
  -1 siblings, 0 replies; 6+ messages in thread
From: David Rientjes @ 2016-09-21 21:16 UTC (permalink / raw)
  To: zijun_hu
  Cc: Andrew Morton, linux-mm, linux-kernel, zijun_hu, tj, mingo,
	iamjoonsoo.kim, mgorman

On Wed, 21 Sep 2016, zijun_hu wrote:

> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index cc6ecd6..a125ae8 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -2576,32 +2576,13 @@ void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms)
>  static void *s_start(struct seq_file *m, loff_t *pos)
>  	__acquires(&vmap_area_lock)
>  {
> -	loff_t n = *pos;
> -	struct vmap_area *va;
> -
>  	spin_lock(&vmap_area_lock);
> -	va = list_first_entry(&vmap_area_list, typeof(*va), list);
> -	while (n > 0 && &va->list != &vmap_area_list) {
> -		n--;
> -		va = list_next_entry(va, list);
> -	}
> -	if (!n && &va->list != &vmap_area_list)
> -		return va;
> -
> -	return NULL;
> -
> +	return seq_list_start(&vmap_area_list, *pos);
>  }
>  
>  static void *s_next(struct seq_file *m, void *p, loff_t *pos)
>  {
> -	struct vmap_area *va = p, *next;
> -
> -	++*pos;
> -	next = list_next_entry(va, list);
> -	if (&next->list != &vmap_area_list)
> -		return next;
> -
> -	return NULL;
> +	return seq_list_next(p, &vmap_area_list, pos);
>  }
>  
>  static void s_stop(struct seq_file *m, void *p)
> @@ -2636,9 +2617,11 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
>  
>  static int s_show(struct seq_file *m, void *p)
>  {
> -	struct vmap_area *va = p;
> +	struct vmap_area *va;
>  	struct vm_struct *v;
>  
> +	va = list_entry((struct list_head *)p, struct vmap_area, list);

Looks good other than no cast is neccessary above.

The patches in this series seem to be unrelated to each other, they 
shouldn't be numbered in order since there's no dependence.  Just 
individual patches are fine.

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

* Re: [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation
@ 2016-09-21 21:16   ` David Rientjes
  0 siblings, 0 replies; 6+ messages in thread
From: David Rientjes @ 2016-09-21 21:16 UTC (permalink / raw)
  To: zijun_hu
  Cc: Andrew Morton, linux-mm, linux-kernel, zijun_hu, tj, mingo,
	iamjoonsoo.kim, mgorman

On Wed, 21 Sep 2016, zijun_hu wrote:

> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index cc6ecd6..a125ae8 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -2576,32 +2576,13 @@ void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms)
>  static void *s_start(struct seq_file *m, loff_t *pos)
>  	__acquires(&vmap_area_lock)
>  {
> -	loff_t n = *pos;
> -	struct vmap_area *va;
> -
>  	spin_lock(&vmap_area_lock);
> -	va = list_first_entry(&vmap_area_list, typeof(*va), list);
> -	while (n > 0 && &va->list != &vmap_area_list) {
> -		n--;
> -		va = list_next_entry(va, list);
> -	}
> -	if (!n && &va->list != &vmap_area_list)
> -		return va;
> -
> -	return NULL;
> -
> +	return seq_list_start(&vmap_area_list, *pos);
>  }
>  
>  static void *s_next(struct seq_file *m, void *p, loff_t *pos)
>  {
> -	struct vmap_area *va = p, *next;
> -
> -	++*pos;
> -	next = list_next_entry(va, list);
> -	if (&next->list != &vmap_area_list)
> -		return next;
> -
> -	return NULL;
> +	return seq_list_next(p, &vmap_area_list, pos);
>  }
>  
>  static void s_stop(struct seq_file *m, void *p)
> @@ -2636,9 +2617,11 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
>  
>  static int s_show(struct seq_file *m, void *p)
>  {
> -	struct vmap_area *va = p;
> +	struct vmap_area *va;
>  	struct vm_struct *v;
>  
> +	va = list_entry((struct list_head *)p, struct vmap_area, list);

Looks good other than no cast is neccessary above.

The patches in this series seem to be unrelated to each other, they 
shouldn't be numbered in order since there's no dependence.  Just 
individual patches are fine.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation
  2016-09-21 21:16   ` David Rientjes
@ 2016-09-21 23:22     ` zijun_hu
  -1 siblings, 0 replies; 6+ messages in thread
From: zijun_hu @ 2016-09-21 23:22 UTC (permalink / raw)
  To: David Rientjes
  Cc: zijun_hu, Andrew Morton, linux-mm, linux-kernel, tj, mingo,
	iamjoonsoo.kim, mgorman

On 2016/9/22 5:16, David Rientjes wrote:
> On Wed, 21 Sep 2016, zijun_hu wrote:
> 
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index cc6ecd6..a125ae8 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -2576,32 +2576,13 @@ void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms)
>>  static void *s_start(struct seq_file *m, loff_t *pos)
>>  	__acquires(&vmap_area_lock)
>>  {
>> -	loff_t n = *pos;
>> -	struct vmap_area *va;
>> -
>>  	spin_lock(&vmap_area_lock);
>> -	va = list_first_entry(&vmap_area_list, typeof(*va), list);
>> -	while (n > 0 && &va->list != &vmap_area_list) {
>> -		n--;
>> -		va = list_next_entry(va, list);
>> -	}
>> -	if (!n && &va->list != &vmap_area_list)
>> -		return va;
>> -
>> -	return NULL;
>> -
>> +	return seq_list_start(&vmap_area_list, *pos);
>>  }
>>  
>>  static void *s_next(struct seq_file *m, void *p, loff_t *pos)
>>  {
>> -	struct vmap_area *va = p, *next;
>> -
>> -	++*pos;
>> -	next = list_next_entry(va, list);
>> -	if (&next->list != &vmap_area_list)
>> -		return next;
>> -
>> -	return NULL;
>> +	return seq_list_next(p, &vmap_area_list, pos);
>>  }
>>  
>>  static void s_stop(struct seq_file *m, void *p)
>> @@ -2636,9 +2617,11 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
>>  
>>  static int s_show(struct seq_file *m, void *p)
>>  {
>> -	struct vmap_area *va = p;
>> +	struct vmap_area *va;
>>  	struct vm_struct *v;
>>  
>> +	va = list_entry((struct list_head *)p, struct vmap_area, list);
> 
> Looks good other than no cast is neccessary above.
  you are right, it will correct it
  i refer to show_timer()@fs/proc/base.c plainly and ignore that redundant cast
> 
> The patches in this series seem to be unrelated to each other, they 
> shouldn't be numbered in order since there's no dependence.  Just 
> individual patches are fine.
> 
you are right, i will provide a individual patch finnally

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

* Re: [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation
@ 2016-09-21 23:22     ` zijun_hu
  0 siblings, 0 replies; 6+ messages in thread
From: zijun_hu @ 2016-09-21 23:22 UTC (permalink / raw)
  To: David Rientjes
  Cc: zijun_hu, Andrew Morton, linux-mm, linux-kernel, tj, mingo,
	iamjoonsoo.kim, mgorman

On 2016/9/22 5:16, David Rientjes wrote:
> On Wed, 21 Sep 2016, zijun_hu wrote:
> 
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index cc6ecd6..a125ae8 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -2576,32 +2576,13 @@ void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms)
>>  static void *s_start(struct seq_file *m, loff_t *pos)
>>  	__acquires(&vmap_area_lock)
>>  {
>> -	loff_t n = *pos;
>> -	struct vmap_area *va;
>> -
>>  	spin_lock(&vmap_area_lock);
>> -	va = list_first_entry(&vmap_area_list, typeof(*va), list);
>> -	while (n > 0 && &va->list != &vmap_area_list) {
>> -		n--;
>> -		va = list_next_entry(va, list);
>> -	}
>> -	if (!n && &va->list != &vmap_area_list)
>> -		return va;
>> -
>> -	return NULL;
>> -
>> +	return seq_list_start(&vmap_area_list, *pos);
>>  }
>>  
>>  static void *s_next(struct seq_file *m, void *p, loff_t *pos)
>>  {
>> -	struct vmap_area *va = p, *next;
>> -
>> -	++*pos;
>> -	next = list_next_entry(va, list);
>> -	if (&next->list != &vmap_area_list)
>> -		return next;
>> -
>> -	return NULL;
>> +	return seq_list_next(p, &vmap_area_list, pos);
>>  }
>>  
>>  static void s_stop(struct seq_file *m, void *p)
>> @@ -2636,9 +2617,11 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
>>  
>>  static int s_show(struct seq_file *m, void *p)
>>  {
>> -	struct vmap_area *va = p;
>> +	struct vmap_area *va;
>>  	struct vm_struct *v;
>>  
>> +	va = list_entry((struct list_head *)p, struct vmap_area, list);
> 
> Looks good other than no cast is neccessary above.
  you are right, it will correct it
  i refer to show_timer()@fs/proc/base.c plainly and ignore that redundant cast
> 
> The patches in this series seem to be unrelated to each other, they 
> shouldn't be numbered in order since there's no dependence.  Just 
> individual patches are fine.
> 
you are right, i will provide a individual patch finnally

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

end of thread, other threads:[~2016-09-21 23:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-21  4:26 [PATCH 2/5] mm/vmalloc.c: simplify /proc/vmallocinfo implementation zijun_hu
2016-09-21  4:26 ` zijun_hu
2016-09-21 21:16 ` David Rientjes
2016-09-21 21:16   ` David Rientjes
2016-09-21 23:22   ` zijun_hu
2016-09-21 23:22     ` zijun_hu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.