# git rev-parse -q --verify 55cb5f43689d7a9ea5bf35ef050f12334f197347^{commit} 55cb5f43689d7a9ea5bf35ef050f12334f197347 already have revision, skipping fetch # git checkout -q -f -B kisskb 55cb5f43689d7a9ea5bf35ef050f12334f197347 # git clean -qxdf # < git log -1 # commit 55cb5f43689d7a9ea5bf35ef050f12334f197347 # Merge: 9c749e61a110 b803d7c664d5 # Author: Linus Torvalds # Date: Tue Dec 19 12:25:43 2023 -0800 # # Merge tag 'trace-v6.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace # # Pull tracing fix from Steven Rostedt: # "While working on the ring buffer, I found one more bug with the # timestamp code, and the fix for this removed the need for the final # 64-bit cmpxchg! # # The ring buffer events hold a "delta" from the previous event. If it # is determined that the delta can not be calculated, it falls back to # adding an absolute timestamp value. The way to know if the delta can # be used is via two stored timestamps in the per-cpu buffer meta data: # # before_stamp and write_stamp # # The before_stamp is written by every event before it tries to allocate # its space on the ring buffer. The write_stamp is written after it # allocates its space and knows that nothing came in after it read the # previous before_stamp and write_stamp and the two matched. # # A previous fix dd9394257078 ("ring-buffer: Do not try to put back # write_stamp") removed putting back the write_stamp to match the # before_stamp so that the next event could use the delta, but races # were found where the two would match, but not be for of the previous # event. # # It was determined to allow the event reservation to not have a valid # write_stamp when it is finished, and this fixed a lot of races. # # The last use of the 64-bit timestamp cmpxchg depended on the # write_stamp being valid after an interruption. But this is no longer # the case, as if an event is interrupted by a softirq that writes an # event, and that event gets interrupted by a hardirq or NMI and that # writes an event, then the softirq could finish its reservation without # a valid write_stamp. # # In the slow path of the event reservation, a delta can still be used # if the write_stamp is valid. Instead of using a cmpxchg against the # write stamp, the before_stamp needs to be read again to validate the # write_stamp. The cmpxchg is not needed. # # This updates the slowpath to validate the write_stamp by comparing it # to the before_stamp and removes all rb_time_cmpxchg() as there are no # more users of that function. # # The removal of the 32-bit updates of rb_time_t will be done in the # next merge window" # # * tag 'trace-v6.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace: # ring-buffer: Fix slowpath of interrupted event # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-ld --version # < git log --format=%s --max-count=1 55cb5f43689d7a9ea5bf35ef050f12334f197347 # make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- x86_64_defconfig # < make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- help # make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- olddefconfig # make -s -j 40 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- Completed OK # rm -rf /kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 # Build took: 0:01:29.667460