Re: + mm-vmalloc-fix-vbq-free-breakage.patch added to mm-hotfixes-unstable branch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 31. May 08:51, Zhaoyang Huang wrote:
> On Fri, May 31, 2024 at 4:12 AM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
> >
> >
> > The patch titled
> >      Subject: mm/vmalloc: fix vbq->free breakage
> > has been added to the -mm mm-hotfixes-unstable branch.  Its filename is
> >      mm-vmalloc-fix-vbq-free-breakage.patch
> >
> > This patch will shortly appear at
> >      https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-vmalloc-fix-vbq-free-breakage.patch
> >
> > This patch will later appear in the mm-hotfixes-unstable branch at
> >     git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
> >
> > Before you just go and hit "reply", please:
> >    a) Consider who else should be cc'ed
> >    b) Prefer to cc a suitable mailing list as well
> >    c) Ideally: find the original patch on the mailing list and do a
> >       reply-to-all to that, adding suitable additional cc's
> >
> > *** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
> >
> > The -mm tree is included into linux-next via the mm-everything
> > branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
> > and is updated there every 2-3 working days
> >
> > ------------------------------------------------------
> > From: "hailong.liu" <hailong.liu@xxxxxxxx>
> > Subject: mm/vmalloc: fix vbq->free breakage
> > Date: Thu, 30 May 2024 17:31:08 +0800
> >
> > The function xa_for_each() in _vm_unmap_aliases() loops through all vbs.
> > However, since commit 062eacf57ad9 ("mm: vmalloc: remove a global
> > vmap_blocks xarray") the vb from xarray may not be on the corresponding
> > CPU vmap_block_queue.  Consequently, purge_fragmented_block() might use
> > the wrong vbq->lock to protect the free list, leading to vbq->free
> > breakage.
> >
> > Link: https://lkml.kernel.org/r/20240530093108.4512-1-hailong.liu@xxxxxxxx
> > Fixes: fc1e0d980037 ("mm/vmalloc: prevent stale TLBs in fully utilized blocks")
> > Signed-off-by: Hailong.Liu <liuhailong@xxxxxxxx>
> > Reported-by: Guangye Yang <guangye.yang@xxxxxxxxxxxx>
> > Cc: Barry Song <21cnbao@xxxxxxxxx>
> > Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx>
> > Cc: Gao Xiang <xiang@xxxxxxxxxx>
> > Cc: Guangye Yang <guangye.yang@xxxxxxxxxxxx>
> > Cc: liuhailong <liuhailong@xxxxxxxx>
> > Cc: Lorenzo Stoakes <lstoakes@xxxxxxxxx>
> > Cc: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx>
> > Cc: Zhaoyang Huang <zhaoyang.huang@xxxxxxxxxx>
> > Cc: <stable@xxxxxxxxxxxxxxx>
> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> > ---
> >
> >  mm/vmalloc.c |    3 +--
> >  1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > --- a/mm/vmalloc.c~mm-vmalloc-fix-vbq-free-breakage
> > +++ a/mm/vmalloc.c
> > @@ -2830,10 +2830,9 @@ static void _vm_unmap_aliases(unsigned l
> >         for_each_possible_cpu(cpu) {
> >                 struct vmap_block_queue *vbq = &per_cpu(vmap_block_queue, cpu);
> >                 struct vmap_block *vb;
> > -               unsigned long idx;
> >
> >                 rcu_read_lock();
> > -               xa_for_each(&vbq->vmap_blocks, idx, vb) {
> > +               list_for_each_entry_rcu(vb, &vbq->free, free_list) {
> No, this is wrong as the fully used vb's TLB will be kept since they
> are not on the vbq->free. I have sent Patchv2 out.
as in https://lore.kernel.org/linux-mm/877csxn6ls.ffs@tglx/
the $VB either in purge_list or in free_list may not flushed
in vm_unmap_aliases(). but $VB's flush is defferred.

In fact, we don’t necessarily need to flush here, and doing so could lead to flushing twice.
one in xa, one in purge_list

so IMO loop through list_for_each_entry_rcu() is more
reasonable to me

> >                         spin_lock(&vb->lock);
> >
> >                         /*
> > _
> >
> > Patches currently in -mm which might be from hailong.liu@xxxxxxxx are
> >
> > mm-vmalloc-fix-vbq-free-breakage.patch
> >
> >

--

Best Regards,
Hailong.




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux