Message ID | 20221212185347.1286824-1-Jason@zx2c4.com (mailing list archive) |
---|---|
Headers | show |
Series | implement getrandom() in vDSO | expand |
Hi Jason, Le 12/12/2022 à 19:53, Jason A. Donenfeld a écrit : > Changes v11->v12: > ---------------- > - In order to avoid mlock()ing pages, and the related rlimit and fork > inheritance issues there, Introduce VM_DROPPABLE to prevent swapping > while meeting the cache-like requirements of vDSO getrandom(). > > This has some tenticles in mm/ and arch/x86/ code, so I've marked the > two patches for that as still RFC, while the rest of the series is not > RFC. > > - Mandate that opaque state blobs don't straddle page boundaries, so > that VM_DROPPABLE can work on page-level granularity rather than > allocation-level granularity. > > - Add compiler barriers to vDSO getrandom() to prevent theoretical > reordering potential. > > - Initialize the trials loop counter in the chacha test. I would have liked to give it a try on powerpc, but the series conflicts. I tried both on v6.1 and on linus/master from now: -------------------------------------------------------------------------- $ LANG= git reset --hard linus/master HEAD is now at b6bb9676f216 Merge tag 'm68knommu-for-v6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu $ LANG= git am -3 ~/Téléchargements/implement-getrandom-in-vDSO.patch Applying: mm: add VM_DROPPABLE for designating always lazily freeable mappings Using index info to reconstruct a base tree... M fs/proc/task_mmu.c M include/linux/mm.h M include/trace/events/mmflags.h M mm/Kconfig M mm/memory.c M mm/mprotect.c M mm/rmap.c Falling back to patching base and 3-way merge... Auto-merging mm/rmap.c CONFLICT (content): Merge conflict in mm/rmap.c Auto-merging mm/mprotect.c Auto-merging mm/memory.c Auto-merging mm/Kconfig Auto-merging include/trace/events/mmflags.h Auto-merging include/linux/mm.h Auto-merging fs/proc/task_mmu.c error: Failed to merge in the changes. Patch failed at 0001 mm: add VM_DROPPABLE for designating always lazily freeable mappings hint: Use 'git am --show-current-patch=diff' to see the failed patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". [chleroy@PO20335 linux-powerpc]$ git diff diff --cc mm/rmap.c index b616870a09be,9fabd7affd3a..000000000000 --- a/mm/rmap.c +++ b/mm/rmap.c @@@ -1291,16 -1256,13 +1291,22 @@@ void page_add_anon_rmap(struct page *pa void page_add_new_anon_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address) { - const bool compound = PageCompound(page); - int nr = compound ? thp_nr_pages(page) : 1; + int nr; VM_BUG_ON_VMA(address < vma->vm_start || address >= vma->vm_end, vma); ++<<<<<<< HEAD + __SetPageSwapBacked(page); + + if (likely(!PageCompound(page))) { + /* increment count (starts at -1) */ + atomic_set(&page->_mapcount, 0); + nr = 1; + } else { ++======= + if (!(vma->vm_flags & VM_DROPPABLE)) + __SetPageSwapBacked(page); + if (compound) { ++>>>>>>> mm: add VM_DROPPABLE for designating always lazily freeable mappings VM_BUG_ON_PAGE(!PageTransHuge(page), page); /* increment count (starts at -1) */ atomic_set(compound_mapcount_ptr(page), 0); ---------------------------------------------------------------------- $ LANG= git reset --hard v6.1 Updating files: 100% (12634/12634), done. HEAD is now at 830b3c68c1fb Linux 6.1 $ LANG= git am -3 ~/Téléchargements/implement-getrandom-in-vDSO.patch Applying: mm: add VM_DROPPABLE for designating always lazily freeable mappings Applying: x86: mm: Skip faulting instruction for VM_DROPPABLE faults Applying: random: add vgetrandom_alloc() syscall Using index info to reconstruct a base tree... M MAINTAINERS M drivers/char/random.c Falling back to patching base and 3-way merge... Auto-merging drivers/char/random.c Auto-merging MAINTAINERS Applying: arch: allocate vgetrandom_alloc() syscall number Applying: random: introduce generic vDSO getrandom() implementation Using index info to reconstruct a base tree... M MAINTAINERS M drivers/char/random.c Falling back to patching base and 3-way merge... Auto-merging drivers/char/random.c CONFLICT (content): Merge conflict in drivers/char/random.c Auto-merging MAINTAINERS error: Failed to merge in the changes. Patch failed at 0005 random: introduce generic vDSO getrandom() implementation hint: Use 'git am --show-current-patch=diff' to see the failed patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". ----------------------------------------------------------------------- Christophe
On Tue, Dec 20, 2022 at 05:17:52PM +0000, Christophe Leroy wrote: > Hi Jason, > > Le 12/12/2022 à 19:53, Jason A. Donenfeld a écrit : > > Changes v11->v12: > > ---------------- > > - In order to avoid mlock()ing pages, and the related rlimit and fork > > inheritance issues there, Introduce VM_DROPPABLE to prevent swapping > > while meeting the cache-like requirements of vDSO getrandom(). > > > > This has some tenticles in mm/ and arch/x86/ code, so I've marked the > > two patches for that as still RFC, while the rest of the series is not > > RFC. > > > > - Mandate that opaque state blobs don't straddle page boundaries, so > > that VM_DROPPABLE can work on page-level granularity rather than > > allocation-level granularity. > > > > - Add compiler barriers to vDSO getrandom() to prevent theoretical > > reordering potential. > > > > - Initialize the trials loop counter in the chacha test. > > I would have liked to give it a try on powerpc, but the series > conflicts. I tried both on v6.1 and on linus/master from now: > Same here, I can't figure out how to apply this series. It would help if people always used the --base option to git format-patch... - Eric
On Tue, Dec 20, 2022 at 05:17:52PM +0000, Christophe Leroy wrote: > I would have liked to give it a try on powerpc, but the series > conflicts. I tried both on v6.1 and on linus/master from now: I'll send a rebased v+1 shortly. Jason
On Tue, Dec 20, 2022 at 08:13:14PM +0000, Eric Biggers wrote: > On Tue, Dec 20, 2022 at 05:17:52PM +0000, Christophe Leroy wrote: > > Hi Jason, > > > > Le 12/12/2022 à 19:53, Jason A. Donenfeld a écrit : > > > Changes v11->v12: > > > ---------------- > > > - In order to avoid mlock()ing pages, and the related rlimit and fork > > > inheritance issues there, Introduce VM_DROPPABLE to prevent swapping > > > while meeting the cache-like requirements of vDSO getrandom(). > > > > > > This has some tenticles in mm/ and arch/x86/ code, so I've marked the > > > two patches for that as still RFC, while the rest of the series is not > > > RFC. > > > > > > - Mandate that opaque state blobs don't straddle page boundaries, so > > > that VM_DROPPABLE can work on page-level granularity rather than > > > allocation-level granularity. > > > > > > - Add compiler barriers to vDSO getrandom() to prevent theoretical > > > reordering potential. > > > > > > - Initialize the trials loop counter in the chacha test. > > > > I would have liked to give it a try on powerpc, but the series > > conflicts. I tried both on v6.1 and on linus/master from now: > > > > Same here, I can't figure out how to apply this series. Rebased v13 posted: https://lore.kernel.org/all/20221221142327.126451-1-Jason@zx2c4.com/ Jason
On Wed, Dec 21, 2022 at 03:25:49PM +0100, Jason A. Donenfeld wrote: > On Tue, Dec 20, 2022 at 08:13:14PM +0000, Eric Biggers wrote: > > On Tue, Dec 20, 2022 at 05:17:52PM +0000, Christophe Leroy wrote: > > > Hi Jason, > > > > > > Le 12/12/2022 à 19:53, Jason A. Donenfeld a écrit : > > > > Changes v11->v12: > > > > ---------------- > > > > - In order to avoid mlock()ing pages, and the related rlimit and fork > > > > inheritance issues there, Introduce VM_DROPPABLE to prevent swapping > > > > while meeting the cache-like requirements of vDSO getrandom(). > > > > > > > > This has some tenticles in mm/ and arch/x86/ code, so I've marked the > > > > two patches for that as still RFC, while the rest of the series is not > > > > RFC. > > > > > > > > - Mandate that opaque state blobs don't straddle page boundaries, so > > > > that VM_DROPPABLE can work on page-level granularity rather than > > > > allocation-level granularity. > > > > > > > > - Add compiler barriers to vDSO getrandom() to prevent theoretical > > > > reordering potential. > > > > > > > > - Initialize the trials loop counter in the chacha test. > > > > > > I would have liked to give it a try on powerpc, but the series > > > conflicts. I tried both on v6.1 and on linus/master from now: > > > > > > > Same here, I can't figure out how to apply this series. > > Rebased v13 posted: https://lore.kernel.org/all/20221221142327.126451-1-Jason@zx2c4.com/ > Thanks, it is always good to give the *actual* base commit though, preferably with the --base option to git format-patch. "Latest random.git master branch" changes over time. - Eric