From: Peter Xu <peterx@redhat.com>
To: Ryan Roberts <ryan.roberts@arm.com>
Cc: Matthew Wilcox <willy@infradead.org>,
David Hildenbrand <david@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Yang Shi <shy828301@gmail.com>,
"Kirill A . Shutemov" <kirill@shutemov.name>,
Mike Kravetz <mike.kravetz@oracle.com>,
John Hubbard <jhubbard@nvidia.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Andrew Jones <andrew.jones@linux.dev>,
Muchun Song <muchun.song@linux.dev>,
linux-riscv@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Andrew Morton <akpm@linux-foundation.org>,
Christoph Hellwig <hch@infradead.org>,
Lorenzo Stoakes <lstoakes@gmail.com>,
Rik van Riel <riel@surriel.com>,
linux-arm-kernel@lists.infradead.org,
Andrea Arcangeli <aarcange@redhat.com>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>,
Vlastimil Babka <vbabka@suse.cz>,
James Houghton <jthoughton@google.com>,
Jason Gunthorpe <jgg@nvidia.com>, Mike Rapoport <rppt@kernel.org>,
Axel Rasmussen <axelrasmussen@google.com>
Subject: Re: [PATCH v4 13/13] mm/gup: Handle hugetlb in the generic follow_page_mask code
Date: Tue, 2 Apr 2024 12:26:03 -0400 [thread overview]
Message-ID: <ZgwxmyAiV0hXv79V@x1n> (raw)
In-Reply-To: <3f670f03-ee97-4368-94ca-e8d18a1b1a69@arm.com>
On Tue, Apr 02, 2024 at 05:18:36PM +0100, Ryan Roberts wrote:
> On 02/04/2024 17:00, Matthew Wilcox wrote:
> > On Tue, Apr 02, 2024 at 05:26:28PM +0200, David Hildenbrand wrote:
> >>> The oops trigger is at mm/gup.c:778:
> >>> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>>
> >>> So 2M passed ok, and its failing for 32M, which is cont-pmd. I'm guessing you're trying to iterate 2M into a cont-pmd folio and ending up with an unexpected tail page?
> >>
> >> I assume we find the expected tail page, it's just that the check
> >>
> >> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>
> >> Doesn't make sense with hugetlb folios. We might have a tail page mapped in
> >> a cont-pmd entry. As soon as we call follow_huge_pmd() on "not the first
> >> cont-pmd entry", we trigger this check.
> >>
> >> Likely this sanity check must also allow for hugetlb folios. Or we should
> >> just remove it completely.
> >>
> >> In the past, we wanted to make sure that we never get tail pages of THP from
> >> PMD entries, because something would currently be broken (we don't support
> >> THP > PMD).
> >
> > That was a practical limitation on my part. We have various parts of
> > the MM which assume that pmd_page() returns a head page and until we
> > get all of those fixed, adding support for folios larger than PMD_SIZE
> > was only going to cause trouble for no significant wins.
> >
> > I agree with you we should get rid of this assertion entirely. We should
> > fix all the places which assume that pmd_page() returns a head page,
> > but that may take some time.
> >
> > As an example, filemap_map_pmd() has:
> >
> > if (pmd_none(*vmf->pmd) && folio_test_pmd_mappable(folio)) {
> > struct page *page = folio_file_page(folio, start);
> > vm_fault_t ret = do_set_pmd(vmf, page);
> >
> > and then do_set_pmd() has:
> >
> > if (page != &folio->page || folio_order(folio) != HPAGE_PMD_ORDER)
> > return ret;
> >
> > so we'd simply refuse to use a PMD to map a folio larger than PMD_SIZE.
> > There's a lot of work to be done to make this work generally (not to
> > mention figuring out how to handle mapcount for such folios ;-).
Hmm, I think it means there're more work than I was thinking... but that's
okay, let's move one step at a time..
> >
> > This particular case seems straightforward though. Just remove the
> > assertion.
>
> Removing the assertion gets me further, but then I end up with this:
>
> [ 9.748422] kernel BUG at include/linux/page-flags.h:1098!
> [ 9.748897] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
> [ 9.749590] Modules linked in:
> [ 9.749867] CPU: 2 PID: 1155 Comm: gup_longterm Not tainted 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.750682] Hardware name: linux,dummy-virt (DT)
> [ 9.751095] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.751729] pc : follow_page_mask+0x730/0x850
> [ 9.752152] lr : follow_page_mask+0x730/0x850
> [ 9.752573] sp : ffff8000898f3aa0
> [ 9.752882] x29: ffff8000898f3aa0 x28: fffffdffc52b91a8 x27: 0000000000000001
> [ 9.753543] x26: ffff00014ae46d08 x25: 00003c0005d88000 x24: fffffdffc5d88000
> [ 9.754221] x23: ffffc1ffc0000000 x22: 0000000000080101 x21: ffff8000898f3ba8
> [ 9.754875] x20: 0000fffff4200000 x19: ffff0001a3d64450 x18: 0000000000000010
> [ 9.755567] x17: 2864616548656761 x16: 5021202626202965 x15: 6761702865677548
> [ 9.756254] x14: 6567615028454741 x13: 2929656761702864 x12: 6165486567615021
> [ 9.756953] x11: 2026262029656761 x10: ffffaaac08f1d6e0 x9 : ffffaaac0612f090
> [ 9.757671] x8 : 00000000ffffefff x7 : ffffaaac08f1d6e0 x6 : 0000000000000000
> [ 9.758356] x5 : ffff00017ffb9cc8 x4 : 0000000000000fff x3 : 0000000000000000
> [ 9.758983] x2 : 0000000000000000 x1 : ffff000189ecb480 x0 : 0000000000000046
> [ 9.759663] Call trace:
> [ 9.759901] follow_page_mask+0x730/0x850
> [ 9.760293] __get_user_pages+0xf4/0x3e8
> [ 9.760683] __gup_longterm_locked+0x204/0xa70
> [ 9.761110] pin_user_pages+0x88/0xc0
> [ 9.761486] gup_test_ioctl+0x860/0xc40
> [ 9.761866] __arm64_sys_ioctl+0xb0/0x100
> [ 9.762254] invoke_syscall+0x50/0x128
> [ 9.762630] el0_svc_common.constprop.0+0x48/0xf8
> [ 9.763104] do_el0_svc+0x28/0x40
> [ 9.763413] el0_svc+0x34/0xe0
> [ 9.763699] el0t_64_sync_handler+0x13c/0x158
> [ 9.764139] el0t_64_sync+0x190/0x198
> [ 9.764465] Code: aa1803e0 d000d8e1 911d6021 97fff4c9 (d4210000)
> [ 9.765053] ---[ end trace 0000000000000000 ]---
> [ 9.765520] note: gup_longterm[1155] exited with irqs disabled
> [ 9.766146] note: gup_longterm[1155] exited with preempt_count 2
> [ 9.767366] ------------[ cut here ]------------
> [ 9.768062] WARNING: CPU: 2 PID: 0 at kernel/context_tracking.c:128 ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.769146] Modules linked in:
> [ 9.769429] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G D 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.770338] Hardware name: linux,dummy-virt (DT)
> [ 9.770837] pstate: 204003c5 (nzCv DAIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.771615] pc : ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.772150] lr : ct_idle_enter+0x10/0x20
> [ 9.772539] sp : ffff8000801b3dc0
> [ 9.772913] x29: ffff8000801b3dc0 x28: 0000000000000000 x27: 0000000000000000
> [ 9.773769] x26: 0000000000000000 x25: ffff00014149e900 x24: 0000000000000000
> [ 9.774526] x23: 0000000000000000 x22: ffffaaac08e99d48 x21: ffffaaac08385730
> [ 9.775255] x20: ffffaaac08e99c28 x19: ffff00017ffc8da0 x18: 0000fffff5ffffff
> [ 9.775924] x17: 0000000000000000 x16: 1fffe0002a57c9e1 x15: 0000000000000001
> [ 9.776619] x14: ffffffffffffffff x13: 0000000000000000 x12: ffffaaac07a06968
> [ 9.777246] x11: 000000ae44c42eec x10: 0000000000000ad0 x9 : ffffaaac06189230
> [ 9.777942] x8 : ffff00014149f430 x7 : 02c9acb509db422c x6 : 000000001015a9f0
> [ 9.778635] x5 : 4000000000000002 x4 : ffff555577c46000 x3 : ffff8000801b3dc0
> [ 9.779671] x2 : ffffaaac08382da0 x1 : 4000000000000000 x0 : ffffaaac08382da0
> [ 9.780703] Call trace:
> [ 9.781150] ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.781949] ct_idle_enter+0x10/0x20
> [ 9.782246] default_idle_call+0x3c/0x160
> [ 9.782624] do_idle+0x21c/0x280
> [ 9.782945] cpu_startup_entry+0x3c/0x50
> [ 9.783268] secondary_start_kernel+0x140/0x168
> [ 9.783818] __secondary_switched+0xb8/0xc0
> [ 9.784163] ---[ end trace 0000000000000000 ]---
>
>
> Which is caused by this:
>
> static __always_inline int PageAnonExclusive(const struct page *page)
> {
> VM_BUG_ON_PGFLAGS(!PageAnon(page), page);
> VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); <<<<
> return test_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags);
> }
>
> Which is called from can_follow_write_pmd(), called just after the assert I just commented out.
>
>
> It's triggered by this test:
>
> # [RUN] R/W longterm GUP pin in MAP_PRIVATE file mapping ... with memfd hugetlb (32768 kB)
>
> Which is the first MAP_PRIVATE test for cont-pmd mapped hugetlb. (All MAP_SHARED tests are passing).
>
>
> Looks like can_follow_write_pmd() returns early for VM_SHARED mappings.
>
> I don't think we only keep the PAE flag in the head page for hugetlb pages? So we can't just remove this assert?
>
> I tried just commenting it out and get assert further down follow_huge_pmd():
>
> VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) &&
> !PageAnonExclusive(page), page);
I just replied in another email; we can try the two patches I attached, or
we can wait until I do some tests (but will be mostly unavailable this
afternoon).
Thanks,
--
Peter Xu
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Peter Xu <peterx@redhat.com>
To: Ryan Roberts <ryan.roberts@arm.com>
Cc: James Houghton <jthoughton@google.com>,
David Hildenbrand <david@redhat.com>,
Yang Shi <shy828301@gmail.com>,
Andrew Jones <andrew.jones@linux.dev>,
linux-mm@kvack.org, linux-riscv@lists.infradead.org,
Andrea Arcangeli <aarcange@redhat.com>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>,
Matthew Wilcox <willy@infradead.org>,
Christoph Hellwig <hch@infradead.org>,
Vlastimil Babka <vbabka@suse.cz>,
Jason Gunthorpe <jgg@nvidia.com>,
Axel Rasmussen <axelrasmussen@google.com>,
Rik van Riel <riel@surriel.com>,
John Hubbard <jhubbard@nvidia.com>,
"Kirill A . Shutemov" <kirill@shutemov.name>,
linux-arm-kernel@lists.infradead.org,
Lorenzo Stoakes <lstoakes@gmail.com>,
Muchun Song <muchun.song@linux.dev>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
linuxppc-dev@lists.ozlabs.org, Mike Rapoport <rppt@kernel.org>,
Mike Kravetz <mike.kravetz@oracle.com>
Subject: Re: [PATCH v4 13/13] mm/gup: Handle hugetlb in the generic follow_page_mask code
Date: Tue, 2 Apr 2024 12:26:03 -0400 [thread overview]
Message-ID: <ZgwxmyAiV0hXv79V@x1n> (raw)
In-Reply-To: <3f670f03-ee97-4368-94ca-e8d18a1b1a69@arm.com>
On Tue, Apr 02, 2024 at 05:18:36PM +0100, Ryan Roberts wrote:
> On 02/04/2024 17:00, Matthew Wilcox wrote:
> > On Tue, Apr 02, 2024 at 05:26:28PM +0200, David Hildenbrand wrote:
> >>> The oops trigger is at mm/gup.c:778:
> >>> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>>
> >>> So 2M passed ok, and its failing for 32M, which is cont-pmd. I'm guessing you're trying to iterate 2M into a cont-pmd folio and ending up with an unexpected tail page?
> >>
> >> I assume we find the expected tail page, it's just that the check
> >>
> >> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>
> >> Doesn't make sense with hugetlb folios. We might have a tail page mapped in
> >> a cont-pmd entry. As soon as we call follow_huge_pmd() on "not the first
> >> cont-pmd entry", we trigger this check.
> >>
> >> Likely this sanity check must also allow for hugetlb folios. Or we should
> >> just remove it completely.
> >>
> >> In the past, we wanted to make sure that we never get tail pages of THP from
> >> PMD entries, because something would currently be broken (we don't support
> >> THP > PMD).
> >
> > That was a practical limitation on my part. We have various parts of
> > the MM which assume that pmd_page() returns a head page and until we
> > get all of those fixed, adding support for folios larger than PMD_SIZE
> > was only going to cause trouble for no significant wins.
> >
> > I agree with you we should get rid of this assertion entirely. We should
> > fix all the places which assume that pmd_page() returns a head page,
> > but that may take some time.
> >
> > As an example, filemap_map_pmd() has:
> >
> > if (pmd_none(*vmf->pmd) && folio_test_pmd_mappable(folio)) {
> > struct page *page = folio_file_page(folio, start);
> > vm_fault_t ret = do_set_pmd(vmf, page);
> >
> > and then do_set_pmd() has:
> >
> > if (page != &folio->page || folio_order(folio) != HPAGE_PMD_ORDER)
> > return ret;
> >
> > so we'd simply refuse to use a PMD to map a folio larger than PMD_SIZE.
> > There's a lot of work to be done to make this work generally (not to
> > mention figuring out how to handle mapcount for such folios ;-).
Hmm, I think it means there're more work than I was thinking... but that's
okay, let's move one step at a time..
> >
> > This particular case seems straightforward though. Just remove the
> > assertion.
>
> Removing the assertion gets me further, but then I end up with this:
>
> [ 9.748422] kernel BUG at include/linux/page-flags.h:1098!
> [ 9.748897] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
> [ 9.749590] Modules linked in:
> [ 9.749867] CPU: 2 PID: 1155 Comm: gup_longterm Not tainted 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.750682] Hardware name: linux,dummy-virt (DT)
> [ 9.751095] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.751729] pc : follow_page_mask+0x730/0x850
> [ 9.752152] lr : follow_page_mask+0x730/0x850
> [ 9.752573] sp : ffff8000898f3aa0
> [ 9.752882] x29: ffff8000898f3aa0 x28: fffffdffc52b91a8 x27: 0000000000000001
> [ 9.753543] x26: ffff00014ae46d08 x25: 00003c0005d88000 x24: fffffdffc5d88000
> [ 9.754221] x23: ffffc1ffc0000000 x22: 0000000000080101 x21: ffff8000898f3ba8
> [ 9.754875] x20: 0000fffff4200000 x19: ffff0001a3d64450 x18: 0000000000000010
> [ 9.755567] x17: 2864616548656761 x16: 5021202626202965 x15: 6761702865677548
> [ 9.756254] x14: 6567615028454741 x13: 2929656761702864 x12: 6165486567615021
> [ 9.756953] x11: 2026262029656761 x10: ffffaaac08f1d6e0 x9 : ffffaaac0612f090
> [ 9.757671] x8 : 00000000ffffefff x7 : ffffaaac08f1d6e0 x6 : 0000000000000000
> [ 9.758356] x5 : ffff00017ffb9cc8 x4 : 0000000000000fff x3 : 0000000000000000
> [ 9.758983] x2 : 0000000000000000 x1 : ffff000189ecb480 x0 : 0000000000000046
> [ 9.759663] Call trace:
> [ 9.759901] follow_page_mask+0x730/0x850
> [ 9.760293] __get_user_pages+0xf4/0x3e8
> [ 9.760683] __gup_longterm_locked+0x204/0xa70
> [ 9.761110] pin_user_pages+0x88/0xc0
> [ 9.761486] gup_test_ioctl+0x860/0xc40
> [ 9.761866] __arm64_sys_ioctl+0xb0/0x100
> [ 9.762254] invoke_syscall+0x50/0x128
> [ 9.762630] el0_svc_common.constprop.0+0x48/0xf8
> [ 9.763104] do_el0_svc+0x28/0x40
> [ 9.763413] el0_svc+0x34/0xe0
> [ 9.763699] el0t_64_sync_handler+0x13c/0x158
> [ 9.764139] el0t_64_sync+0x190/0x198
> [ 9.764465] Code: aa1803e0 d000d8e1 911d6021 97fff4c9 (d4210000)
> [ 9.765053] ---[ end trace 0000000000000000 ]---
> [ 9.765520] note: gup_longterm[1155] exited with irqs disabled
> [ 9.766146] note: gup_longterm[1155] exited with preempt_count 2
> [ 9.767366] ------------[ cut here ]------------
> [ 9.768062] WARNING: CPU: 2 PID: 0 at kernel/context_tracking.c:128 ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.769146] Modules linked in:
> [ 9.769429] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G D 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.770338] Hardware name: linux,dummy-virt (DT)
> [ 9.770837] pstate: 204003c5 (nzCv DAIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.771615] pc : ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.772150] lr : ct_idle_enter+0x10/0x20
> [ 9.772539] sp : ffff8000801b3dc0
> [ 9.772913] x29: ffff8000801b3dc0 x28: 0000000000000000 x27: 0000000000000000
> [ 9.773769] x26: 0000000000000000 x25: ffff00014149e900 x24: 0000000000000000
> [ 9.774526] x23: 0000000000000000 x22: ffffaaac08e99d48 x21: ffffaaac08385730
> [ 9.775255] x20: ffffaaac08e99c28 x19: ffff00017ffc8da0 x18: 0000fffff5ffffff
> [ 9.775924] x17: 0000000000000000 x16: 1fffe0002a57c9e1 x15: 0000000000000001
> [ 9.776619] x14: ffffffffffffffff x13: 0000000000000000 x12: ffffaaac07a06968
> [ 9.777246] x11: 000000ae44c42eec x10: 0000000000000ad0 x9 : ffffaaac06189230
> [ 9.777942] x8 : ffff00014149f430 x7 : 02c9acb509db422c x6 : 000000001015a9f0
> [ 9.778635] x5 : 4000000000000002 x4 : ffff555577c46000 x3 : ffff8000801b3dc0
> [ 9.779671] x2 : ffffaaac08382da0 x1 : 4000000000000000 x0 : ffffaaac08382da0
> [ 9.780703] Call trace:
> [ 9.781150] ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.781949] ct_idle_enter+0x10/0x20
> [ 9.782246] default_idle_call+0x3c/0x160
> [ 9.782624] do_idle+0x21c/0x280
> [ 9.782945] cpu_startup_entry+0x3c/0x50
> [ 9.783268] secondary_start_kernel+0x140/0x168
> [ 9.783818] __secondary_switched+0xb8/0xc0
> [ 9.784163] ---[ end trace 0000000000000000 ]---
>
>
> Which is caused by this:
>
> static __always_inline int PageAnonExclusive(const struct page *page)
> {
> VM_BUG_ON_PGFLAGS(!PageAnon(page), page);
> VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); <<<<
> return test_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags);
> }
>
> Which is called from can_follow_write_pmd(), called just after the assert I just commented out.
>
>
> It's triggered by this test:
>
> # [RUN] R/W longterm GUP pin in MAP_PRIVATE file mapping ... with memfd hugetlb (32768 kB)
>
> Which is the first MAP_PRIVATE test for cont-pmd mapped hugetlb. (All MAP_SHARED tests are passing).
>
>
> Looks like can_follow_write_pmd() returns early for VM_SHARED mappings.
>
> I don't think we only keep the PAE flag in the head page for hugetlb pages? So we can't just remove this assert?
>
> I tried just commenting it out and get assert further down follow_huge_pmd():
>
> VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) &&
> !PageAnonExclusive(page), page);
I just replied in another email; we can try the two patches I attached, or
we can wait until I do some tests (but will be mostly unavailable this
afternoon).
Thanks,
--
Peter Xu
WARNING: multiple messages have this Message-ID (diff)
From: Peter Xu <peterx@redhat.com>
To: Ryan Roberts <ryan.roberts@arm.com>
Cc: Matthew Wilcox <willy@infradead.org>,
David Hildenbrand <david@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Yang Shi <shy828301@gmail.com>,
"Kirill A . Shutemov" <kirill@shutemov.name>,
Mike Kravetz <mike.kravetz@oracle.com>,
John Hubbard <jhubbard@nvidia.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Andrew Jones <andrew.jones@linux.dev>,
Muchun Song <muchun.song@linux.dev>,
linux-riscv@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Andrew Morton <akpm@linux-foundation.org>,
Christoph Hellwig <hch@infradead.org>,
Lorenzo Stoakes <lstoakes@gmail.com>,
Rik van Riel <riel@surriel.com>,
linux-arm-kernel@lists.infradead.org,
Andrea Arcangeli <aarcange@redhat.com>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>,
Vlastimil Babka <vbabka@suse.cz>,
James Houghton <jthoughton@google.com>,
Jason Gunthorpe <jgg@nvidia.com>, Mike Rapoport <rppt@kernel.org>,
Axel Rasmussen <axelrasmussen@google.com>
Subject: Re: [PATCH v4 13/13] mm/gup: Handle hugetlb in the generic follow_page_mask code
Date: Tue, 2 Apr 2024 12:26:03 -0400 [thread overview]
Message-ID: <ZgwxmyAiV0hXv79V@x1n> (raw)
In-Reply-To: <3f670f03-ee97-4368-94ca-e8d18a1b1a69@arm.com>
On Tue, Apr 02, 2024 at 05:18:36PM +0100, Ryan Roberts wrote:
> On 02/04/2024 17:00, Matthew Wilcox wrote:
> > On Tue, Apr 02, 2024 at 05:26:28PM +0200, David Hildenbrand wrote:
> >>> The oops trigger is at mm/gup.c:778:
> >>> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>>
> >>> So 2M passed ok, and its failing for 32M, which is cont-pmd. I'm guessing you're trying to iterate 2M into a cont-pmd folio and ending up with an unexpected tail page?
> >>
> >> I assume we find the expected tail page, it's just that the check
> >>
> >> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>
> >> Doesn't make sense with hugetlb folios. We might have a tail page mapped in
> >> a cont-pmd entry. As soon as we call follow_huge_pmd() on "not the first
> >> cont-pmd entry", we trigger this check.
> >>
> >> Likely this sanity check must also allow for hugetlb folios. Or we should
> >> just remove it completely.
> >>
> >> In the past, we wanted to make sure that we never get tail pages of THP from
> >> PMD entries, because something would currently be broken (we don't support
> >> THP > PMD).
> >
> > That was a practical limitation on my part. We have various parts of
> > the MM which assume that pmd_page() returns a head page and until we
> > get all of those fixed, adding support for folios larger than PMD_SIZE
> > was only going to cause trouble for no significant wins.
> >
> > I agree with you we should get rid of this assertion entirely. We should
> > fix all the places which assume that pmd_page() returns a head page,
> > but that may take some time.
> >
> > As an example, filemap_map_pmd() has:
> >
> > if (pmd_none(*vmf->pmd) && folio_test_pmd_mappable(folio)) {
> > struct page *page = folio_file_page(folio, start);
> > vm_fault_t ret = do_set_pmd(vmf, page);
> >
> > and then do_set_pmd() has:
> >
> > if (page != &folio->page || folio_order(folio) != HPAGE_PMD_ORDER)
> > return ret;
> >
> > so we'd simply refuse to use a PMD to map a folio larger than PMD_SIZE.
> > There's a lot of work to be done to make this work generally (not to
> > mention figuring out how to handle mapcount for such folios ;-).
Hmm, I think it means there're more work than I was thinking... but that's
okay, let's move one step at a time..
> >
> > This particular case seems straightforward though. Just remove the
> > assertion.
>
> Removing the assertion gets me further, but then I end up with this:
>
> [ 9.748422] kernel BUG at include/linux/page-flags.h:1098!
> [ 9.748897] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
> [ 9.749590] Modules linked in:
> [ 9.749867] CPU: 2 PID: 1155 Comm: gup_longterm Not tainted 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.750682] Hardware name: linux,dummy-virt (DT)
> [ 9.751095] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.751729] pc : follow_page_mask+0x730/0x850
> [ 9.752152] lr : follow_page_mask+0x730/0x850
> [ 9.752573] sp : ffff8000898f3aa0
> [ 9.752882] x29: ffff8000898f3aa0 x28: fffffdffc52b91a8 x27: 0000000000000001
> [ 9.753543] x26: ffff00014ae46d08 x25: 00003c0005d88000 x24: fffffdffc5d88000
> [ 9.754221] x23: ffffc1ffc0000000 x22: 0000000000080101 x21: ffff8000898f3ba8
> [ 9.754875] x20: 0000fffff4200000 x19: ffff0001a3d64450 x18: 0000000000000010
> [ 9.755567] x17: 2864616548656761 x16: 5021202626202965 x15: 6761702865677548
> [ 9.756254] x14: 6567615028454741 x13: 2929656761702864 x12: 6165486567615021
> [ 9.756953] x11: 2026262029656761 x10: ffffaaac08f1d6e0 x9 : ffffaaac0612f090
> [ 9.757671] x8 : 00000000ffffefff x7 : ffffaaac08f1d6e0 x6 : 0000000000000000
> [ 9.758356] x5 : ffff00017ffb9cc8 x4 : 0000000000000fff x3 : 0000000000000000
> [ 9.758983] x2 : 0000000000000000 x1 : ffff000189ecb480 x0 : 0000000000000046
> [ 9.759663] Call trace:
> [ 9.759901] follow_page_mask+0x730/0x850
> [ 9.760293] __get_user_pages+0xf4/0x3e8
> [ 9.760683] __gup_longterm_locked+0x204/0xa70
> [ 9.761110] pin_user_pages+0x88/0xc0
> [ 9.761486] gup_test_ioctl+0x860/0xc40
> [ 9.761866] __arm64_sys_ioctl+0xb0/0x100
> [ 9.762254] invoke_syscall+0x50/0x128
> [ 9.762630] el0_svc_common.constprop.0+0x48/0xf8
> [ 9.763104] do_el0_svc+0x28/0x40
> [ 9.763413] el0_svc+0x34/0xe0
> [ 9.763699] el0t_64_sync_handler+0x13c/0x158
> [ 9.764139] el0t_64_sync+0x190/0x198
> [ 9.764465] Code: aa1803e0 d000d8e1 911d6021 97fff4c9 (d4210000)
> [ 9.765053] ---[ end trace 0000000000000000 ]---
> [ 9.765520] note: gup_longterm[1155] exited with irqs disabled
> [ 9.766146] note: gup_longterm[1155] exited with preempt_count 2
> [ 9.767366] ------------[ cut here ]------------
> [ 9.768062] WARNING: CPU: 2 PID: 0 at kernel/context_tracking.c:128 ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.769146] Modules linked in:
> [ 9.769429] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G D 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.770338] Hardware name: linux,dummy-virt (DT)
> [ 9.770837] pstate: 204003c5 (nzCv DAIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.771615] pc : ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.772150] lr : ct_idle_enter+0x10/0x20
> [ 9.772539] sp : ffff8000801b3dc0
> [ 9.772913] x29: ffff8000801b3dc0 x28: 0000000000000000 x27: 0000000000000000
> [ 9.773769] x26: 0000000000000000 x25: ffff00014149e900 x24: 0000000000000000
> [ 9.774526] x23: 0000000000000000 x22: ffffaaac08e99d48 x21: ffffaaac08385730
> [ 9.775255] x20: ffffaaac08e99c28 x19: ffff00017ffc8da0 x18: 0000fffff5ffffff
> [ 9.775924] x17: 0000000000000000 x16: 1fffe0002a57c9e1 x15: 0000000000000001
> [ 9.776619] x14: ffffffffffffffff x13: 0000000000000000 x12: ffffaaac07a06968
> [ 9.777246] x11: 000000ae44c42eec x10: 0000000000000ad0 x9 : ffffaaac06189230
> [ 9.777942] x8 : ffff00014149f430 x7 : 02c9acb509db422c x6 : 000000001015a9f0
> [ 9.778635] x5 : 4000000000000002 x4 : ffff555577c46000 x3 : ffff8000801b3dc0
> [ 9.779671] x2 : ffffaaac08382da0 x1 : 4000000000000000 x0 : ffffaaac08382da0
> [ 9.780703] Call trace:
> [ 9.781150] ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.781949] ct_idle_enter+0x10/0x20
> [ 9.782246] default_idle_call+0x3c/0x160
> [ 9.782624] do_idle+0x21c/0x280
> [ 9.782945] cpu_startup_entry+0x3c/0x50
> [ 9.783268] secondary_start_kernel+0x140/0x168
> [ 9.783818] __secondary_switched+0xb8/0xc0
> [ 9.784163] ---[ end trace 0000000000000000 ]---
>
>
> Which is caused by this:
>
> static __always_inline int PageAnonExclusive(const struct page *page)
> {
> VM_BUG_ON_PGFLAGS(!PageAnon(page), page);
> VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); <<<<
> return test_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags);
> }
>
> Which is called from can_follow_write_pmd(), called just after the assert I just commented out.
>
>
> It's triggered by this test:
>
> # [RUN] R/W longterm GUP pin in MAP_PRIVATE file mapping ... with memfd hugetlb (32768 kB)
>
> Which is the first MAP_PRIVATE test for cont-pmd mapped hugetlb. (All MAP_SHARED tests are passing).
>
>
> Looks like can_follow_write_pmd() returns early for VM_SHARED mappings.
>
> I don't think we only keep the PAE flag in the head page for hugetlb pages? So we can't just remove this assert?
>
> I tried just commenting it out and get assert further down follow_huge_pmd():
>
> VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) &&
> !PageAnonExclusive(page), page);
I just replied in another email; we can try the two patches I attached, or
we can wait until I do some tests (but will be mostly unavailable this
afternoon).
Thanks,
--
Peter Xu
_______________________________________________
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: Peter Xu <peterx@redhat.com>
To: Ryan Roberts <ryan.roberts@arm.com>
Cc: Matthew Wilcox <willy@infradead.org>,
David Hildenbrand <david@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Yang Shi <shy828301@gmail.com>,
"Kirill A . Shutemov" <kirill@shutemov.name>,
Mike Kravetz <mike.kravetz@oracle.com>,
John Hubbard <jhubbard@nvidia.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Andrew Jones <andrew.jones@linux.dev>,
Muchun Song <muchun.song@linux.dev>,
linux-riscv@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Andrew Morton <akpm@linux-foundation.org>,
Christoph Hellwig <hch@infradead.org>,
Lorenzo Stoakes <lstoakes@gmail.com>,
Rik van Riel <riel@surriel.com>,
linux-arm-kernel@lists.infradead.org,
Andrea Arcangeli <aarcange@redhat.com>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>,
Vlastimil Babka <vbabka@suse.cz>,
James Houghton <jthoughton@google.com>,
Jason Gunthorpe <jgg@nvidia.com>, Mike Rapoport <rppt@kernel.org>,
Axel Rasmussen <axelrasmussen@google.com>
Subject: Re: [PATCH v4 13/13] mm/gup: Handle hugetlb in the generic follow_page_mask code
Date: Tue, 2 Apr 2024 12:26:03 -0400 [thread overview]
Message-ID: <ZgwxmyAiV0hXv79V@x1n> (raw)
In-Reply-To: <3f670f03-ee97-4368-94ca-e8d18a1b1a69@arm.com>
On Tue, Apr 02, 2024 at 05:18:36PM +0100, Ryan Roberts wrote:
> On 02/04/2024 17:00, Matthew Wilcox wrote:
> > On Tue, Apr 02, 2024 at 05:26:28PM +0200, David Hildenbrand wrote:
> >>> The oops trigger is at mm/gup.c:778:
> >>> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>>
> >>> So 2M passed ok, and its failing for 32M, which is cont-pmd. I'm guessing you're trying to iterate 2M into a cont-pmd folio and ending up with an unexpected tail page?
> >>
> >> I assume we find the expected tail page, it's just that the check
> >>
> >> VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page);
> >>
> >> Doesn't make sense with hugetlb folios. We might have a tail page mapped in
> >> a cont-pmd entry. As soon as we call follow_huge_pmd() on "not the first
> >> cont-pmd entry", we trigger this check.
> >>
> >> Likely this sanity check must also allow for hugetlb folios. Or we should
> >> just remove it completely.
> >>
> >> In the past, we wanted to make sure that we never get tail pages of THP from
> >> PMD entries, because something would currently be broken (we don't support
> >> THP > PMD).
> >
> > That was a practical limitation on my part. We have various parts of
> > the MM which assume that pmd_page() returns a head page and until we
> > get all of those fixed, adding support for folios larger than PMD_SIZE
> > was only going to cause trouble for no significant wins.
> >
> > I agree with you we should get rid of this assertion entirely. We should
> > fix all the places which assume that pmd_page() returns a head page,
> > but that may take some time.
> >
> > As an example, filemap_map_pmd() has:
> >
> > if (pmd_none(*vmf->pmd) && folio_test_pmd_mappable(folio)) {
> > struct page *page = folio_file_page(folio, start);
> > vm_fault_t ret = do_set_pmd(vmf, page);
> >
> > and then do_set_pmd() has:
> >
> > if (page != &folio->page || folio_order(folio) != HPAGE_PMD_ORDER)
> > return ret;
> >
> > so we'd simply refuse to use a PMD to map a folio larger than PMD_SIZE.
> > There's a lot of work to be done to make this work generally (not to
> > mention figuring out how to handle mapcount for such folios ;-).
Hmm, I think it means there're more work than I was thinking... but that's
okay, let's move one step at a time..
> >
> > This particular case seems straightforward though. Just remove the
> > assertion.
>
> Removing the assertion gets me further, but then I end up with this:
>
> [ 9.748422] kernel BUG at include/linux/page-flags.h:1098!
> [ 9.748897] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
> [ 9.749590] Modules linked in:
> [ 9.749867] CPU: 2 PID: 1155 Comm: gup_longterm Not tainted 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.750682] Hardware name: linux,dummy-virt (DT)
> [ 9.751095] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.751729] pc : follow_page_mask+0x730/0x850
> [ 9.752152] lr : follow_page_mask+0x730/0x850
> [ 9.752573] sp : ffff8000898f3aa0
> [ 9.752882] x29: ffff8000898f3aa0 x28: fffffdffc52b91a8 x27: 0000000000000001
> [ 9.753543] x26: ffff00014ae46d08 x25: 00003c0005d88000 x24: fffffdffc5d88000
> [ 9.754221] x23: ffffc1ffc0000000 x22: 0000000000080101 x21: ffff8000898f3ba8
> [ 9.754875] x20: 0000fffff4200000 x19: ffff0001a3d64450 x18: 0000000000000010
> [ 9.755567] x17: 2864616548656761 x16: 5021202626202965 x15: 6761702865677548
> [ 9.756254] x14: 6567615028454741 x13: 2929656761702864 x12: 6165486567615021
> [ 9.756953] x11: 2026262029656761 x10: ffffaaac08f1d6e0 x9 : ffffaaac0612f090
> [ 9.757671] x8 : 00000000ffffefff x7 : ffffaaac08f1d6e0 x6 : 0000000000000000
> [ 9.758356] x5 : ffff00017ffb9cc8 x4 : 0000000000000fff x3 : 0000000000000000
> [ 9.758983] x2 : 0000000000000000 x1 : ffff000189ecb480 x0 : 0000000000000046
> [ 9.759663] Call trace:
> [ 9.759901] follow_page_mask+0x730/0x850
> [ 9.760293] __get_user_pages+0xf4/0x3e8
> [ 9.760683] __gup_longterm_locked+0x204/0xa70
> [ 9.761110] pin_user_pages+0x88/0xc0
> [ 9.761486] gup_test_ioctl+0x860/0xc40
> [ 9.761866] __arm64_sys_ioctl+0xb0/0x100
> [ 9.762254] invoke_syscall+0x50/0x128
> [ 9.762630] el0_svc_common.constprop.0+0x48/0xf8
> [ 9.763104] do_el0_svc+0x28/0x40
> [ 9.763413] el0_svc+0x34/0xe0
> [ 9.763699] el0t_64_sync_handler+0x13c/0x158
> [ 9.764139] el0t_64_sync+0x190/0x198
> [ 9.764465] Code: aa1803e0 d000d8e1 911d6021 97fff4c9 (d4210000)
> [ 9.765053] ---[ end trace 0000000000000000 ]---
> [ 9.765520] note: gup_longterm[1155] exited with irqs disabled
> [ 9.766146] note: gup_longterm[1155] exited with preempt_count 2
> [ 9.767366] ------------[ cut here ]------------
> [ 9.768062] WARNING: CPU: 2 PID: 0 at kernel/context_tracking.c:128 ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.769146] Modules linked in:
> [ 9.769429] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G D 6.9.0-rc2-00210-g910ff1a347e4-dirty #12
> [ 9.770338] Hardware name: linux,dummy-virt (DT)
> [ 9.770837] pstate: 204003c5 (nzCv DAIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 9.771615] pc : ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.772150] lr : ct_idle_enter+0x10/0x20
> [ 9.772539] sp : ffff8000801b3dc0
> [ 9.772913] x29: ffff8000801b3dc0 x28: 0000000000000000 x27: 0000000000000000
> [ 9.773769] x26: 0000000000000000 x25: ffff00014149e900 x24: 0000000000000000
> [ 9.774526] x23: 0000000000000000 x22: ffffaaac08e99d48 x21: ffffaaac08385730
> [ 9.775255] x20: ffffaaac08e99c28 x19: ffff00017ffc8da0 x18: 0000fffff5ffffff
> [ 9.775924] x17: 0000000000000000 x16: 1fffe0002a57c9e1 x15: 0000000000000001
> [ 9.776619] x14: ffffffffffffffff x13: 0000000000000000 x12: ffffaaac07a06968
> [ 9.777246] x11: 000000ae44c42eec x10: 0000000000000ad0 x9 : ffffaaac06189230
> [ 9.777942] x8 : ffff00014149f430 x7 : 02c9acb509db422c x6 : 000000001015a9f0
> [ 9.778635] x5 : 4000000000000002 x4 : ffff555577c46000 x3 : ffff8000801b3dc0
> [ 9.779671] x2 : ffffaaac08382da0 x1 : 4000000000000000 x0 : ffffaaac08382da0
> [ 9.780703] Call trace:
> [ 9.781150] ct_kernel_exit.constprop.0+0x108/0x120
> [ 9.781949] ct_idle_enter+0x10/0x20
> [ 9.782246] default_idle_call+0x3c/0x160
> [ 9.782624] do_idle+0x21c/0x280
> [ 9.782945] cpu_startup_entry+0x3c/0x50
> [ 9.783268] secondary_start_kernel+0x140/0x168
> [ 9.783818] __secondary_switched+0xb8/0xc0
> [ 9.784163] ---[ end trace 0000000000000000 ]---
>
>
> Which is caused by this:
>
> static __always_inline int PageAnonExclusive(const struct page *page)
> {
> VM_BUG_ON_PGFLAGS(!PageAnon(page), page);
> VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); <<<<
> return test_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags);
> }
>
> Which is called from can_follow_write_pmd(), called just after the assert I just commented out.
>
>
> It's triggered by this test:
>
> # [RUN] R/W longterm GUP pin in MAP_PRIVATE file mapping ... with memfd hugetlb (32768 kB)
>
> Which is the first MAP_PRIVATE test for cont-pmd mapped hugetlb. (All MAP_SHARED tests are passing).
>
>
> Looks like can_follow_write_pmd() returns early for VM_SHARED mappings.
>
> I don't think we only keep the PAE flag in the head page for hugetlb pages? So we can't just remove this assert?
>
> I tried just commenting it out and get assert further down follow_huge_pmd():
>
> VM_BUG_ON_PAGE((flags & FOLL_PIN) && PageAnon(page) &&
> !PageAnonExclusive(page), page);
I just replied in another email; we can try the two patches I attached, or
we can wait until I do some tests (but will be mostly unavailable this
afternoon).
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2024-04-02 16:26 UTC|newest]
Thread overview: 160+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-27 15:23 [PATCH v4 00/13] mm/gup: Unify hugetlb, part 2 peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 01/13] mm/Kconfig: CONFIG_PGTABLE_HAS_HUGE_LEAVES peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 02/13] mm/hugetlb: Declare hugetlbfs_pagecache_present() non-static peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 03/13] mm: Make HPAGE_PXD_* macros even if !THP peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 04/13] mm: Introduce vma_pgtable_walk_{begin|end}() peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 05/13] mm/arch: Provide pud_pfn() fallback peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-04-02 19:05 ` Nathan Chancellor
2024-04-02 19:05 ` Nathan Chancellor
2024-04-02 19:05 ` Nathan Chancellor
2024-04-02 19:05 ` Nathan Chancellor
2024-04-02 22:43 ` Peter Xu
2024-04-02 22:43 ` Peter Xu
2024-04-02 22:43 ` Peter Xu
2024-04-02 22:43 ` Peter Xu
2024-04-02 22:53 ` Jason Gunthorpe
2024-04-02 22:53 ` Jason Gunthorpe
2024-04-02 22:53 ` Jason Gunthorpe
2024-04-02 22:53 ` Jason Gunthorpe
2024-04-02 23:35 ` Peter Xu
2024-04-02 23:35 ` Peter Xu
2024-04-02 23:35 ` Peter Xu
2024-04-02 23:35 ` Peter Xu
2024-04-03 12:08 ` Jason Gunthorpe
2024-04-03 12:08 ` Jason Gunthorpe
2024-04-03 12:08 ` Jason Gunthorpe
2024-04-03 12:08 ` Jason Gunthorpe
2024-04-03 12:26 ` Christophe Leroy
2024-04-03 12:26 ` Christophe Leroy
2024-04-03 12:26 ` Christophe Leroy
2024-04-03 12:26 ` Christophe Leroy
2024-04-03 13:07 ` Jason Gunthorpe
2024-04-03 13:07 ` Jason Gunthorpe
2024-04-03 13:07 ` Jason Gunthorpe
2024-04-03 13:07 ` Jason Gunthorpe
2024-04-03 13:17 ` Christophe Leroy
2024-04-03 13:17 ` Christophe Leroy
2024-04-03 13:17 ` Christophe Leroy
2024-04-03 13:17 ` Christophe Leroy
2024-04-03 13:33 ` Jason Gunthorpe
2024-04-03 13:33 ` Jason Gunthorpe
2024-04-03 13:33 ` Jason Gunthorpe
2024-04-03 13:33 ` Jason Gunthorpe
2024-04-03 18:25 ` Peter Xu
2024-04-03 18:25 ` Peter Xu
2024-04-03 18:25 ` Peter Xu
2024-04-03 18:25 ` Peter Xu
2024-04-04 11:24 ` Jason Gunthorpe
2024-04-04 11:24 ` Jason Gunthorpe
2024-04-04 11:24 ` Jason Gunthorpe
2024-04-04 11:24 ` Jason Gunthorpe
2024-04-04 12:00 ` Peter Xu
2024-04-04 12:00 ` Peter Xu
2024-04-04 12:00 ` Peter Xu
2024-04-04 12:00 ` Peter Xu
2024-03-27 15:23 ` [PATCH v4 06/13] mm/gup: Drop folio_fast_pin_allowed() in hugepd processing peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-28 10:10 ` David Hildenbrand
2024-03-28 10:10 ` David Hildenbrand
2024-03-28 10:10 ` David Hildenbrand
2024-03-28 10:10 ` David Hildenbrand
2024-03-28 19:01 ` Andrew Morton
2024-03-28 19:01 ` Andrew Morton
2024-03-28 19:01 ` Andrew Morton
2024-03-28 19:01 ` Andrew Morton
2024-03-27 15:23 ` [PATCH v4 07/13] mm/gup: Refactor record_subpages() to find 1st small page peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 08/13] mm/gup: Handle hugetlb for no_page_table() peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 09/13] mm/gup: Cache *pudp in follow_pud_mask() peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 10/13] mm/gup: Handle huge pud for follow_pud_mask() peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 11/13] mm/gup: Handle huge pmd for follow_pmd_mask() peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 12/13] mm/gup: Handle hugepd for follow_page() peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` [PATCH v4 13/13] mm/gup: Handle hugetlb in the generic follow_page_mask code peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-03-27 15:23 ` peterx
2024-04-02 14:48 ` Ryan Roberts
2024-04-02 14:48 ` Ryan Roberts
2024-04-02 14:48 ` Ryan Roberts
2024-04-02 14:48 ` Ryan Roberts
2024-04-02 15:26 ` David Hildenbrand
2024-04-02 15:26 ` David Hildenbrand
2024-04-02 15:26 ` David Hildenbrand
2024-04-02 15:26 ` David Hildenbrand
2024-04-02 16:00 ` Matthew Wilcox
2024-04-02 16:00 ` Matthew Wilcox
2024-04-02 16:00 ` Matthew Wilcox
2024-04-02 16:00 ` Matthew Wilcox
2024-04-02 16:18 ` Ryan Roberts
2024-04-02 16:18 ` Ryan Roberts
2024-04-02 16:18 ` Ryan Roberts
2024-04-02 16:18 ` Ryan Roberts
2024-04-02 16:26 ` Peter Xu [this message]
2024-04-02 16:26 ` Peter Xu
2024-04-02 16:26 ` Peter Xu
2024-04-02 16:26 ` Peter Xu
2024-04-02 16:40 ` David Hildenbrand
2024-04-02 16:40 ` David Hildenbrand
2024-04-02 16:40 ` David Hildenbrand
2024-04-02 16:40 ` David Hildenbrand
2024-04-02 16:20 ` Peter Xu
2024-04-02 16:20 ` Peter Xu
2024-04-02 16:20 ` Peter Xu
2024-04-02 16:20 ` Peter Xu
2024-04-02 16:39 ` David Hildenbrand
2024-04-02 16:39 ` David Hildenbrand
2024-04-02 16:39 ` David Hildenbrand
2024-04-02 16:39 ` David Hildenbrand
2024-04-02 17:57 ` Peter Xu
2024-04-02 17:57 ` Peter Xu
2024-04-02 17:57 ` Peter Xu
2024-04-02 17:57 ` Peter Xu
2024-04-02 18:43 ` David Hildenbrand
2024-04-02 18:43 ` David Hildenbrand
2024-04-02 18:43 ` David Hildenbrand
2024-04-02 18:43 ` David Hildenbrand
2024-04-02 16:46 ` Ryan Roberts
2024-04-02 16:46 ` Ryan Roberts
2024-04-02 16:46 ` Ryan Roberts
2024-04-02 16:46 ` Ryan Roberts
2024-04-02 17:58 ` Peter Xu
2024-04-02 17:58 ` Peter Xu
2024-04-02 17:58 ` Peter Xu
2024-04-02 17:58 ` Peter Xu
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=ZgwxmyAiV0hXv79V@x1n \
--to=peterx@redhat.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=andrew.jones@linux.dev \
--cc=aneesh.kumar@kernel.org \
--cc=axelrasmussen@google.com \
--cc=christophe.leroy@csgroup.eu \
--cc=david@redhat.com \
--cc=hch@infradead.org \
--cc=jgg@nvidia.com \
--cc=jhubbard@nvidia.com \
--cc=jthoughton@google.com \
--cc=kirill@shutemov.name \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lstoakes@gmail.com \
--cc=mike.kravetz@oracle.com \
--cc=mpe@ellerman.id.au \
--cc=muchun.song@linux.dev \
--cc=riel@surriel.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shy828301@gmail.com \
--cc=vbabka@suse.cz \
--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.