All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, Christoph Hellwig <hch@lst.de>,
	Uladzislau Rezki <urezki@gmail.com>,
	Lorenzo Stoakes <lstoakes@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	John Ogness <jogness@linutronix.de>,
	linux-arm-kernel@lists.infradead.org,
	Mark Rutland <mark.rutland@arm.com>,
	Marc Zyngier <maz@kernel.org>,
	x86@kernel.org, Nadav Amit <nadav.amit@gmail.com>
Subject: Re: [RFC PATCH 3/3] mm/vmalloc.c: change _vm_unmap_aliases() to do purge firstly
Date: Mon, 22 May 2023 22:34:26 +0800	[thread overview]
Message-ID: <ZGt9cm3vqDTEQvdG@MiWiFi-R3L-srv> (raw)
In-Reply-To: <87wn10wp45.ffs@tglx>

On 05/22/23 at 02:02pm, Thomas Gleixner wrote:
> On Mon, May 22 2023 at 19:21, Baoquan He wrote:
> > On 05/22/23 at 01:10am, Thomas Gleixner wrote:
> >
> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> > index 5ca55b357148..4b11a32df49d 100644
> > --- a/mm/vmalloc.c
> > +++ b/mm/vmalloc.c
> > @@ -1728,6 +1728,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
> >  	unsigned int num_purged_areas = 0;
> >  	struct list_head local_purge_list;
> >  	struct vmap_area *va, *n_va;
> > +	struct vmap_block vb;
> >  
> >  	lockdep_assert_held(&vmap_purge_lock);
> >  
> > @@ -1736,6 +1737,14 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
> >  	list_replace_init(&purge_vmap_area_list, &local_purge_list);
> >  	spin_unlock(&purge_vmap_area_lock);
> >  
> > +	vb = container_of(va, struct vmap_block, va);
> 
> This cannot work vmap_area is not embedded in vmap_block. vmap_block::va
> is a pointer. vmap_area does not link back to vmap_block, so there is no
> way to find it based on a vmap_area.

Oh, the code is buggy. va->flags can tell if it's vmap_block, then we
can deduce the vb pointer.

diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 5ca55b357148..73d6ce441351 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1728,6 +1728,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
        unsigned int num_purged_areas = 0;
        struct list_head local_purge_list;
        struct vmap_area *va, *n_va;
+       struct vmap_block vb;
 
        lockdep_assert_held(&vmap_purge_lock);
 
@@ -1736,6 +1737,15 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
        list_replace_init(&purge_vmap_area_list, &local_purge_list);
        spin_unlock(&purge_vmap_area_lock);
 
+       if (va->flags & VMAP_FLAGS_MASK == VMAP_RAM|VMAP_BLOCK) {
+               vb = container_of(va, struct vmap_block, va);
+               if (vb->dirty_max) {
			/*This is pseudo code for illustration*/
+                       s = vb->dirty_min << PAGE_SHIFT;
+                       e = vb->dirty_max << PAGE_SHIFT;
+               }
+               kfree(vb);
+       }
+
        if (unlikely(list_empty(&local_purge_list)))
                goto out;
 
@@ -2083,7 +2093,6 @@ static void free_vmap_block(struct vmap_block *vb)
        spin_unlock(&vmap_area_lock);
 
        free_vmap_area_noflush(vb->va);
-       kfree_rcu(vb, rcu_head);
 }

> 
> Aside of that va is not initialized here :)

Oh, this is not real code, just to illustrate how it can calculate and
flush the last two pages of vmap_block. If you have the per va flushing
via array patch, I can work out formal code change based on that.


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Baoquan He <bhe@redhat.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, Christoph Hellwig <hch@lst.de>,
	Uladzislau Rezki <urezki@gmail.com>,
	Lorenzo Stoakes <lstoakes@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	John Ogness <jogness@linutronix.de>,
	linux-arm-kernel@lists.infradead.org,
	Mark Rutland <mark.rutland@arm.com>,
	Marc Zyngier <maz@kernel.org>,
	x86@kernel.org, Nadav Amit <nadav.amit@gmail.com>
Subject: Re: [RFC PATCH 3/3] mm/vmalloc.c: change _vm_unmap_aliases() to do purge firstly
Date: Mon, 22 May 2023 22:34:26 +0800	[thread overview]
Message-ID: <ZGt9cm3vqDTEQvdG@MiWiFi-R3L-srv> (raw)
In-Reply-To: <87wn10wp45.ffs@tglx>

On 05/22/23 at 02:02pm, Thomas Gleixner wrote:
> On Mon, May 22 2023 at 19:21, Baoquan He wrote:
> > On 05/22/23 at 01:10am, Thomas Gleixner wrote:
> >
> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> > index 5ca55b357148..4b11a32df49d 100644
> > --- a/mm/vmalloc.c
> > +++ b/mm/vmalloc.c
> > @@ -1728,6 +1728,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
> >  	unsigned int num_purged_areas = 0;
> >  	struct list_head local_purge_list;
> >  	struct vmap_area *va, *n_va;
> > +	struct vmap_block vb;
> >  
> >  	lockdep_assert_held(&vmap_purge_lock);
> >  
> > @@ -1736,6 +1737,14 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
> >  	list_replace_init(&purge_vmap_area_list, &local_purge_list);
> >  	spin_unlock(&purge_vmap_area_lock);
> >  
> > +	vb = container_of(va, struct vmap_block, va);
> 
> This cannot work vmap_area is not embedded in vmap_block. vmap_block::va
> is a pointer. vmap_area does not link back to vmap_block, so there is no
> way to find it based on a vmap_area.

Oh, the code is buggy. va->flags can tell if it's vmap_block, then we
can deduce the vb pointer.

diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 5ca55b357148..73d6ce441351 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1728,6 +1728,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
        unsigned int num_purged_areas = 0;
        struct list_head local_purge_list;
        struct vmap_area *va, *n_va;
+       struct vmap_block vb;
 
        lockdep_assert_held(&vmap_purge_lock);
 
@@ -1736,6 +1737,15 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
        list_replace_init(&purge_vmap_area_list, &local_purge_list);
        spin_unlock(&purge_vmap_area_lock);
 
+       if (va->flags & VMAP_FLAGS_MASK == VMAP_RAM|VMAP_BLOCK) {
+               vb = container_of(va, struct vmap_block, va);
+               if (vb->dirty_max) {
			/*This is pseudo code for illustration*/
+                       s = vb->dirty_min << PAGE_SHIFT;
+                       e = vb->dirty_max << PAGE_SHIFT;
+               }
+               kfree(vb);
+       }
+
        if (unlikely(list_empty(&local_purge_list)))
                goto out;
 
@@ -2083,7 +2093,6 @@ static void free_vmap_block(struct vmap_block *vb)
        spin_unlock(&vmap_area_lock);
 
        free_vmap_area_noflush(vb->va);
-       kfree_rcu(vb, rcu_head);
 }

> 
> Aside of that va is not initialized here :)

Oh, this is not real code, just to illustrate how it can calculate and
flush the last two pages of vmap_block. If you have the per va flushing
via array patch, I can work out formal code change based on that.



  reply	other threads:[~2023-05-22 14:35 UTC|newest]

Thread overview: 150+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-15 16:43 Excessive TLB flush ranges Thomas Gleixner
2023-05-15 16:43 ` Thomas Gleixner
2023-05-15 16:59 ` Russell King (Oracle)
2023-05-15 16:59   ` Russell King (Oracle)
2023-05-15 19:46   ` Thomas Gleixner
2023-05-15 19:46     ` Thomas Gleixner
2023-05-15 21:11     ` Thomas Gleixner
2023-05-15 21:11       ` Thomas Gleixner
2023-05-15 21:31       ` Russell King (Oracle)
2023-05-15 21:31         ` Russell King (Oracle)
2023-05-16  6:37         ` Thomas Gleixner
2023-05-16  6:37           ` Thomas Gleixner
2023-05-16  6:46           ` Thomas Gleixner
2023-05-16  6:46             ` Thomas Gleixner
2023-05-16  8:18           ` Thomas Gleixner
2023-05-16  8:18             ` Thomas Gleixner
2023-05-16  8:20             ` Thomas Gleixner
2023-05-16  8:20               ` Thomas Gleixner
2023-05-16  8:27               ` Russell King (Oracle)
2023-05-16  8:27                 ` Russell King (Oracle)
2023-05-16  9:03                 ` Thomas Gleixner
2023-05-16  9:03                   ` Thomas Gleixner
2023-05-16 10:05                   ` Baoquan He
2023-05-16 10:05                     ` Baoquan He
2023-05-16 14:21                     ` Thomas Gleixner
2023-05-16 14:21                       ` Thomas Gleixner
2023-05-16 19:03                       ` Thomas Gleixner
2023-05-16 19:03                         ` Thomas Gleixner
2023-05-17  9:38                         ` Thomas Gleixner
2023-05-17  9:38                           ` Thomas Gleixner
2023-05-17 10:52                           ` Baoquan He
2023-05-17 10:52                             ` Baoquan He
2023-05-19 11:22                             ` Thomas Gleixner
2023-05-19 11:22                               ` Thomas Gleixner
2023-05-19 11:49                               ` Baoquan He
2023-05-19 11:49                                 ` Baoquan He
2023-05-19 14:13                                 ` Thomas Gleixner
2023-05-19 14:13                                   ` Thomas Gleixner
2023-05-19 12:01                         ` [RFC PATCH 1/3] mm/vmalloc.c: try to flush vmap_area one by one Baoquan He
2023-05-19 12:01                           ` Baoquan He
2023-05-19 14:16                           ` Thomas Gleixner
2023-05-19 14:16                             ` Thomas Gleixner
2023-05-19 12:02                         ` [RFC PATCH 2/3] mm/vmalloc.c: Only flush VM_FLUSH_RESET_PERMS area immediately Baoquan He
2023-05-19 12:02                           ` Baoquan He
2023-05-19 12:03                         ` [RFC PATCH 3/3] mm/vmalloc.c: change _vm_unmap_aliases() to do purge firstly Baoquan He
2023-05-19 12:03                           ` Baoquan He
2023-05-19 14:17                           ` Thomas Gleixner
2023-05-19 14:17                             ` Thomas Gleixner
2023-05-19 18:38                           ` Thomas Gleixner
2023-05-19 18:38                             ` Thomas Gleixner
2023-05-19 23:46                             ` Baoquan He
2023-05-19 23:46                               ` Baoquan He
2023-05-21 23:10                               ` Thomas Gleixner
2023-05-21 23:10                                 ` Thomas Gleixner
2023-05-22 11:21                                 ` Baoquan He
2023-05-22 11:21                                   ` Baoquan He
2023-05-22 12:02                                   ` Thomas Gleixner
2023-05-22 12:02                                     ` Thomas Gleixner
2023-05-22 14:34                                     ` Baoquan He [this message]
2023-05-22 14:34                                       ` Baoquan He
2023-05-22 20:21                                       ` Thomas Gleixner
2023-05-22 20:21                                         ` Thomas Gleixner
2023-05-22 20:44                                         ` Thomas Gleixner
2023-05-22 20:44                                           ` Thomas Gleixner
2023-05-23  9:35                                         ` Baoquan He
2023-05-23  9:35                                           ` Baoquan He
2023-05-19 13:49                   ` Excessive TLB flush ranges Thomas Gleixner
2023-05-19 13:49                     ` Thomas Gleixner
2023-05-16  8:21             ` Russell King (Oracle)
2023-05-16  8:21               ` Russell King (Oracle)
2023-05-16  8:19           ` Russell King (Oracle)
2023-05-16  8:19             ` Russell King (Oracle)
2023-05-16  8:44             ` Thomas Gleixner
2023-05-16  8:44               ` Thomas Gleixner
2023-05-16  8:48               ` Russell King (Oracle)
2023-05-16  8:48                 ` Russell King (Oracle)
2023-05-16 12:09                 ` Thomas Gleixner
2023-05-16 12:09                   ` Thomas Gleixner
2023-05-16 13:42                   ` Uladzislau Rezki
2023-05-16 13:42                     ` Uladzislau Rezki
2023-05-16 14:38                     ` Thomas Gleixner
2023-05-16 14:38                       ` Thomas Gleixner
2023-05-16 15:01                       ` Uladzislau Rezki
2023-05-16 15:01                         ` Uladzislau Rezki
2023-05-16 17:04                         ` Thomas Gleixner
2023-05-16 17:04                           ` Thomas Gleixner
2023-05-17 11:26                           ` Uladzislau Rezki
2023-05-17 11:26                             ` Uladzislau Rezki
2023-05-17 11:58                             ` Thomas Gleixner
2023-05-17 11:58                               ` Thomas Gleixner
2023-05-17 12:15                               ` Uladzislau Rezki
2023-05-17 12:15                                 ` Uladzislau Rezki
2023-05-17 16:32                                 ` Thomas Gleixner
2023-05-17 16:32                                   ` Thomas Gleixner
2023-05-19 10:01                                   ` Uladzislau Rezki
2023-05-19 10:01                                     ` Uladzislau Rezki
2023-05-19 14:56                                     ` Thomas Gleixner
2023-05-19 14:56                                       ` Thomas Gleixner
2023-05-19 15:14                                       ` Uladzislau Rezki
2023-05-19 15:14                                         ` Uladzislau Rezki
2023-05-19 16:32                                         ` Thomas Gleixner
2023-05-19 16:32                                           ` Thomas Gleixner
2023-05-19 17:02                                           ` Uladzislau Rezki
2023-05-19 17:02                                             ` Uladzislau Rezki
2023-05-16 17:56                       ` Nadav Amit
2023-05-16 17:56                         ` Nadav Amit
2023-05-16 19:32                         ` Thomas Gleixner
2023-05-16 19:32                           ` Thomas Gleixner
2023-05-17  0:23                           ` Thomas Gleixner
2023-05-17  0:23                             ` Thomas Gleixner
2023-05-17  1:23                             ` Nadav Amit
2023-05-17  1:23                               ` Nadav Amit
2023-05-17 10:31                               ` Thomas Gleixner
2023-05-17 10:31                                 ` Thomas Gleixner
2023-05-17 11:47                                 ` Thomas Gleixner
2023-05-17 11:47                                   ` Thomas Gleixner
2023-05-17 22:41                                   ` Nadav Amit
2023-05-17 22:41                                     ` Nadav Amit
2023-05-17 14:43                                 ` Mark Rutland
2023-05-17 14:43                                   ` Mark Rutland
2023-05-17 16:41                                   ` Thomas Gleixner
2023-05-17 16:41                                     ` Thomas Gleixner
2023-05-17 22:57                                 ` Nadav Amit
2023-05-17 22:57                                   ` Nadav Amit
2023-05-19 11:49                                   ` Thomas Gleixner
2023-05-19 11:49                                     ` Thomas Gleixner
2023-05-17 12:12                               ` Russell King (Oracle)
2023-05-17 12:12                                 ` Russell King (Oracle)
2023-05-17 23:14                                 ` Nadav Amit
2023-05-17 23:14                                   ` Nadav Amit
2023-05-15 18:17 ` Uladzislau Rezki
2023-05-15 18:17   ` Uladzislau Rezki
2023-05-16  2:26   ` Baoquan He
2023-05-16  2:26     ` Baoquan He
2023-05-16  6:40     ` Thomas Gleixner
2023-05-16  6:40       ` Thomas Gleixner
2023-05-16  8:07       ` Baoquan He
2023-05-16  8:07         ` Baoquan He
2023-05-16  8:10         ` Baoquan He
2023-05-16  8:10           ` Baoquan He
2023-05-16  8:45         ` Russell King (Oracle)
2023-05-16  8:45           ` Russell King (Oracle)
2023-05-16  9:13           ` Thomas Gleixner
2023-05-16  9:13             ` Thomas Gleixner
2023-05-16  8:54         ` Thomas Gleixner
2023-05-16  8:54           ` Thomas Gleixner
2023-05-16  9:48           ` Baoquan He
2023-05-16  9:48             ` Baoquan He
2023-05-15 20:02 ` Nadav Amit
2023-05-15 20:02   ` Nadav Amit

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=ZGt9cm3vqDTEQvdG@MiWiFi-R3L-srv \
    --to=bhe@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hch@lst.de \
    --cc=jogness@linutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@armlinux.org.uk \
    --cc=lstoakes@gmail.com \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=nadav.amit@gmail.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=urezki@gmail.com \
    --cc=x86@kernel.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.