#1 is a preparation for improved error reporting, #2 adds support for MADV_POPULATE_WRITE, #3 cleans up the code to avoid global variables and prepare for concurrency, #4 and #5 optimize thread handling, #6 makes os_mem_prealloc() safe to be called from multiple threads concurrently and #7 makes the SIGBUS handler coexist cleanly with the MCE SIGBUS handler under Linux.
Details regarding MADV_POPULATE_WRITE can be found in introducing upstream Linux commits 4ca9b3859dac ("mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables") and eb2faa513c24 ("mm/madvise: report SIGBUS as -EFAULT for MADV_POPULATE_(READ|WRITE)"), and in the man page update [1]. v3 -> v4: - Added ACKs - "util/oslib-posix: Support concurrent os_mem_prealloc() invocation" -- Remove stale comment from patch description v2 -> v3: - "util/oslib-posix: Let touch_all_pages() return an error" -- Added - Added ACKs/RBs - "util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()" -- Set error code accordingly v1 -> v2: - "util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc()" -- Handle thread with no data to initialize -- Always set use_madv_populate_write properly -- Add comment regarding future fallocate() optimization - "util/oslib-posix: Don't create too many threads with small memory or little pages" -- Added - "util/oslib-posix: Avoid creating a single thread with MADV_POPULATE_WRITE" -- Added - "util/oslib-posix: Support concurrent os_mem_prealloc() invocation" -- Add missing g_once_init_leave() -- Move g_once_init_enter() to the place where it is actually needed - "util/oslib-posix: Forward SIGBUS to MCE handler under Linux" -- Added [1] https://lkml.kernel.org/r/20210823120645.8223-1-da...@redhat.com Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: "Michael S. Tsirkin" <m...@redhat.com> Cc: Igor Mammedov <imamm...@redhat.com> Cc: Eduardo Habkost <ehabk...@redhat.com> Cc: Dr. David Alan Gilbert <dgilb...@redhat.com> Cc: Pankaj Gupta <pankaj.gupta.li...@gmail.com> Cc: Daniel P. Berrangé <berra...@redhat.com> David Hildenbrand (7): util/oslib-posix: Let touch_all_pages() return an error util/oslib-posix: Support MADV_POPULATE_WRITE for os_mem_prealloc() util/oslib-posix: Introduce and use MemsetContext for touch_all_pages() util/oslib-posix: Don't create too many threads with small memory or little pages util/oslib-posix: Avoid creating a single thread with MADV_POPULATE_WRITE util/oslib-posix: Support concurrent os_mem_prealloc() invocation util/oslib-posix: Forward SIGBUS to MCE handler under Linux include/qemu/osdep.h | 7 ++ softmmu/cpus.c | 4 + util/oslib-posix.c | 231 ++++++++++++++++++++++++++++++++----------- 3 files changed, 187 insertions(+), 55 deletions(-) -- 2.31.1