All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: Uladzislau Rezki <urezki@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	stephen.s.brennan@oracle.com, willy@infradead.org,
	akpm@linux-foundation.org, hch@infradead.org
Subject: Re: [PATCH v1 2/7] mm/vmalloc.c: add flags to mark vm_map_ram area
Date: Fri, 9 Dec 2022 16:27:34 +0800	[thread overview]
Message-ID: <Y5LxdkM5QlBL3OIC@MiWiFi-R3L-srv> (raw)
In-Reply-To: <Y5JAkqeecvNwPcRf@pc636>

On 12/08/22 at 08:52pm, Uladzislau Rezki wrote:
> On Wed, Dec 07, 2022 at 04:03:41PM +0800, Baoquan He wrote:
......
> > > > @@ -1967,6 +1972,9 @@ static void *new_vmap_block(unsigned int order, gfp_t gfp_mask)
> > > >  		kfree(vb);
> > > >  		return ERR_CAST(va);
> > > >  	}
> > > > +	spin_lock(&vmap_area_lock);
> > > > +	va->flags = VMAP_RAM|VMAP_BLOCK;
> > > > +	spin_unlock(&vmap_area_lock);
> > > >
> > > The per-cpu code was created as a fast per-cpu allocator because of high
> > > vmalloc lock contention. If possible we should avoid of locking of the
> > > vmap_area_lock. Because it has a high contention.
> > 
> > Fair enough. I made below draft patch to address the concern. By
> > adding argument va_flags to alloc_vmap_area(), we can pass the 
> > vm_map_ram flags into alloc_vmap_area and filled into vmap_area->flags.
> > With this, we don't need add extra action to acquire vmap_area_root lock
> > and do the flags setting. Is it OK to you?
> > 
> > From 115f6080b339d0cf9dd20c5f6c0d3121f6b22274 Mon Sep 17 00:00:00 2001
> > From: Baoquan He <bhe@redhat.com>
> > Date: Wed, 7 Dec 2022 11:08:14 +0800
> > Subject: [PATCH] mm/vmalloc: change alloc_vmap_area() to pass in va_flags
> > 
> > With this change, we can pass and set vmap_area->flags for vm_map_ram area
> > in alloc_vmap_area(). Then no extra action need be added to acquire
> > vmap_area_lock when doing the vmap_area->flags setting.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> >  mm/vmalloc.c | 13 +++++++++----
> >  1 file changed, 9 insertions(+), 4 deletions(-)
> > 
> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> > index ccaa461998f3..d74eddec352f 100644
> > --- a/mm/vmalloc.c
> > +++ b/mm/vmalloc.c
> > @@ -1586,7 +1586,9 @@ preload_this_cpu_lock(spinlock_t *lock, gfp_t gfp_mask, int node)
> >  static struct vmap_area *alloc_vmap_area(unsigned long size,
> >  				unsigned long align,
> >  				unsigned long vstart, unsigned long vend,
> > -				int node, gfp_t gfp_mask)
> > +				int node, gfp_t gfp_mask,
> > +				unsigned long va_flags)
> > +)
> >  {
> >  	struct vmap_area *va;
> >  	unsigned long freed;
> > @@ -1630,6 +1632,7 @@ static struct vmap_area *alloc_vmap_area(unsigned long size,
> >  	va->va_start = addr;
> >  	va->va_end = addr + size;
> >  	va->vm = NULL;
> > +	va->flags = va_flags;
> >  
> >  	spin_lock(&vmap_area_lock);
> >  	insert_vmap_area(va, &vmap_area_root, &vmap_area_list);
> > @@ -1961,7 +1964,8 @@ static void *new_vmap_block(unsigned int order, gfp_t gfp_mask)
> >  
> >  	va = alloc_vmap_area(VMAP_BLOCK_SIZE, VMAP_BLOCK_SIZE,
> >  					VMALLOC_START, VMALLOC_END,
> > -					node, gfp_mask);
> > +					node, gfp_mask,
> > +					VMAP_RAM|VMAP_BLOCK);
> >  	if (IS_ERR(va)) {
> >  		kfree(vb);
> >  		return ERR_CAST(va);
> > @@ -2258,7 +2262,8 @@ void *vm_map_ram(struct page **pages, unsigned int count, int node)
> >  	} else {
> >  		struct vmap_area *va;
> >  		va = alloc_vmap_area(size, PAGE_SIZE,
> > -				VMALLOC_START, VMALLOC_END, node, GFP_KERNEL);
> > +				VMALLOC_START, VMALLOC_END,
> > +				node, GFP_KERNEL, VMAP_RAM|VMAP_BLOCK);
> >  		if (IS_ERR(va))
> >  			return NULL;
> >  
> > @@ -2498,7 +2503,7 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
> >  	if (!(flags & VM_NO_GUARD))
> >  		size += PAGE_SIZE;
> >  
> > -	va = alloc_vmap_area(size, align, start, end, node, gfp_mask);
> > +	va = alloc_vmap_area(size, align, start, end, node, gfp_mask, 0);
> >  	if (IS_ERR(va)) {
> >  		kfree(area);
> >  		return NULL;
> > -- 
> > 2.34.1
> > 
> Yes, this is better than it was before. Adding an extra parameter makes
> it more valid and logical.

That's great. I will add this in v2.



  reply	other threads:[~2022-12-09  8:27 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-04  1:30 [PATCH v1 0/7] mm/vmalloc.c: allow vread() to read out vm_map_ram areas Baoquan He
2022-12-04  1:30 ` [PATCH v1 1/7] mm/vmalloc.c: add used_map into vmap_block to track space of vmap_block Baoquan He
2022-12-04  1:30 ` [PATCH v1 2/7] mm/vmalloc.c: add flags to mark vm_map_ram area Baoquan He
2022-12-05 12:56   ` Uladzislau Rezki
2022-12-07  8:03     ` Baoquan He
2022-12-08 19:52       ` Uladzislau Rezki
2022-12-09  8:27         ` Baoquan He [this message]
2022-12-04  1:30 ` [PATCH v1 3/7] mm/vmalloc.c: allow vread() to read out vm_map_ram areas Baoquan He
2022-12-04  3:47   ` kernel test robot
2022-12-17  1:14     ` Baoquan He
2022-12-04  1:30 ` [PATCH v1 4/7] mm/vmalloc: explicitly identify vm_map_ram area when shown in /proc/vmcoreinfo Baoquan He
2022-12-04  1:30 ` [PATCH v1 5/7] mm/vmalloc: skip the uninitilized vmalloc areas Baoquan He
2022-12-04  1:30 ` [PATCH v1 6/7] powerpc: mm: add VM_IOREMAP flag to the vmalloc area Baoquan He
2022-12-04  1:30   ` Baoquan He
2022-12-04  1:30 ` [PATCH v1 7/7] sh: mm: set " Baoquan He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y5LxdkM5QlBL3OIC@MiWiFi-R3L-srv \
    --to=bhe@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=stephen.s.brennan@oracle.com \
    --cc=urezki@gmail.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.