Message ID | 1725373521-451395-1-git-send-email-steven.sistare@oracle.com (mailing list archive) |
---|---|
Headers | show |
Series | memfd-pin huge page fixes | expand |
Hi Steve, > Subject: [PATCH V1 0/5] memfd-pin huge page fixes > > Fix multiple bugs that occur when using memfd_pin_folios with hugetlb > pages > and THP. The hugetlb bugs only bite when the page is not yet faulted in > when memfd_pin_folios is called. The THP bug bites when the starting offset > passed to memfd_pin_folios is not huge page aligned. See the commit > messages > for details. Thank you for fixing these bugs. I have Acked all patches except for patch #1, as my understanding of xarrays is limited at this point. Also, could you please briefly describe how you have exercised memfd_alloc_folio() code path or what tests you have run to uncover these bugs? I'd like to figure out ways to augment the list of udmabuf tests to validate scenarios where hugetlb pages are not faulted in and memfd_pin_folios() is called. Thanks, Vivek > > Steve Sistare (5): > mm/filemap: fix filemap_get_folios_contig THP panic > mm/hugetlb: fix memfd_pin_folios free_huge_pages leak > mm/hugetlb: fix memfd_pin_folios resv_huge_pages leak > mm/gup: fix memfd_pin_folios hugetlb page allocation > mm/gup: fix memfd_pin_folios alloc race panic > > include/linux/hugetlb.h | 10 ++++++++++ > mm/filemap.c | 4 ++++ > mm/gup.c | 5 ++++- > mm/hugetlb.c | 17 +++++++++++++++++ > mm/memfd.c | 15 +++++++++------ > 5 files changed, 44 insertions(+), 7 deletions(-) > > -- > 1.8.3.1
On 9/3/2024 9:12 PM, Kasireddy, Vivek wrote: > Hi Steve, > >> Subject: [PATCH V1 0/5] memfd-pin huge page fixes >> >> Fix multiple bugs that occur when using memfd_pin_folios with hugetlb >> pages >> and THP. The hugetlb bugs only bite when the page is not yet faulted in >> when memfd_pin_folios is called. The THP bug bites when the starting offset >> passed to memfd_pin_folios is not huge page aligned. See the commit >> messages >> for details. > Thank you for fixing these bugs. I have Acked all patches except for patch #1, > as my understanding of xarrays is limited at this point. > > Also, could you please briefly describe how you have exercised memfd_alloc_folio() > code path or what tests you have run to uncover these bugs? I'd like to > figure out ways to augment the list of udmabuf tests to validate scenarios > where hugetlb pages are not faulted in and memfd_pin_folios() is called. I am extending iommufd to support memfd pinning, so I added a new ioctl which takes an fd, offset, and length to pin. I am just getting started, so currently it does nothing more than call memfd_pin_folios immediately followed by unpin_folios. Then exit the process. That is sufficient to trigger all the bugs except the alloc race panic. I tested with these files: /dev/hugepages/file /dev/shm/file with: mount -o remount,huge=always /dev/shm memfd_create(MFD_HUGETLB) memfd_create(0) with: echo always > /sys/kernel/mm/transparent_hugepage/shmem_enabled - Steve >> Steve Sistare (5): >> mm/filemap: fix filemap_get_folios_contig THP panic >> mm/hugetlb: fix memfd_pin_folios free_huge_pages leak >> mm/hugetlb: fix memfd_pin_folios resv_huge_pages leak >> mm/gup: fix memfd_pin_folios hugetlb page allocation >> mm/gup: fix memfd_pin_folios alloc race panic >> >> include/linux/hugetlb.h | 10 ++++++++++ >> mm/filemap.c | 4 ++++ >> mm/gup.c | 5 ++++- >> mm/hugetlb.c | 17 +++++++++++++++++ >> mm/memfd.c | 15 +++++++++------ >> 5 files changed, 44 insertions(+), 7 deletions(-) >> >> -- >> 1.8.3.1 >
> Subject: Re: [PATCH V1 0/5] memfd-pin huge page fixes > > On 9/3/2024 9:12 PM, Kasireddy, Vivek wrote: > > Hi Steve, > > > >> Subject: [PATCH V1 0/5] memfd-pin huge page fixes > >> > >> Fix multiple bugs that occur when using memfd_pin_folios with hugetlb > >> pages > >> and THP. The hugetlb bugs only bite when the page is not yet faulted in > >> when memfd_pin_folios is called. The THP bug bites when the starting > offset > >> passed to memfd_pin_folios is not huge page aligned. See the commit > >> messages > >> for details. > > Thank you for fixing these bugs. I have Acked all patches except for patch > #1, > > as my understanding of xarrays is limited at this point. > > > > Also, could you please briefly describe how you have exercised > memfd_alloc_folio() > > code path or what tests you have run to uncover these bugs? I'd like to > > figure out ways to augment the list of udmabuf tests to validate scenarios > > where hugetlb pages are not faulted in and memfd_pin_folios() is called. > > I am extending iommufd to support memfd pinning, so I added a new ioctl > which > takes an fd, offset, and length to pin. I am just getting started, so currently > it does nothing more than call memfd_pin_folios immediately followed by > unpin_folios. > Then exit the process. That is sufficient to trigger all the bugs except the alloc > race panic. I tested with these files: > /dev/hugepages/file > /dev/shm/file with: mount -o remount,huge=always /dev/shm > memfd_create(MFD_HUGETLB) > memfd_create(0) with: echo always > > /sys/kernel/mm/transparent_hugepage/shmem_enabled Thank you for explaining your test-case. Thanks, Vivek > > - Steve > > >> Steve Sistare (5): > >> mm/filemap: fix filemap_get_folios_contig THP panic > >> mm/hugetlb: fix memfd_pin_folios free_huge_pages leak > >> mm/hugetlb: fix memfd_pin_folios resv_huge_pages leak > >> mm/gup: fix memfd_pin_folios hugetlb page allocation > >> mm/gup: fix memfd_pin_folios alloc race panic > >> > >> include/linux/hugetlb.h | 10 ++++++++++ > >> mm/filemap.c | 4 ++++ > >> mm/gup.c | 5 ++++- > >> mm/hugetlb.c | 17 +++++++++++++++++ > >> mm/memfd.c | 15 +++++++++------ > >> 5 files changed, 44 insertions(+), 7 deletions(-) > >> > >> -- > >> 1.8.3.1 > >