# git rev-parse -q --verify bf9aa14fc523d2763fc9a10672a709224e8fcaf4^{commit} bf9aa14fc523d2763fc9a10672a709224e8fcaf4 already have revision, skipping fetch # git checkout -q -f -B kisskb bf9aa14fc523d2763fc9a10672a709224e8fcaf4 # git clean -qxdf # < git log -1 # commit bf9aa14fc523d2763fc9a10672a709224e8fcaf4 # Merge: 035238752319 cdc905d16b07 # Author: Linus Torvalds # Date: Tue Nov 19 16:35:06 2024 -0800 # # Merge tag 'timers-core-2024-11-18' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip # # Pull timer updates from Thomas Gleixner: # "A rather large update for timekeeping and timers: # # - The final step to get rid of auto-rearming posix-timers # # posix-timers are currently auto-rearmed by the kernel when the # signal of the timer is ignored so that the timer signal can be # delivered once the corresponding signal is unignored. # # This requires to throttle the timer to prevent a DoS by small # intervals and keeps the system pointlessly out of low power states # for no value. This is a long standing non-trivial problem due to # the lock order of posix-timer lock and the sighand lock along with # life time issues as the timer and the sigqueue have different life # time rules. # # Cure this by: # # - Embedding the sigqueue into the timer struct to have the same # life time rules. Aside of that this also avoids the lookup of # the timer in the signal delivery and rearm path as it's just a # always valid container_of() now. # # - Queuing ignored timer signals onto a seperate ignored list. # # - Moving queued timer signals onto the ignored list when the # signal is switched to SIG_IGN before it could be delivered. # # - Walking the ignored list when SIG_IGN is lifted and requeue the # signals to the actual signal lists. This allows the signal # delivery code to rearm the timer. # # This also required to consolidate the signal delivery rules so they # are consistent across all situations. With that all self test # scenarios finally succeed. # # - Core infrastructure for VFS multigrain timestamping # # This is required to allow the kernel to use coarse grained time # stamps by default and switch to fine grained time stamps when inode # attributes are actively observed via getattr(). # # These changes have been provided to the VFS tree as well, so that # the VFS specific infrastructure could be built on top. # # - Cleanup and consolidation of the sleep() infrastructure # # - Move all sleep and timeout functions into one file # # - Rework udelay() and ndelay() into proper documented inline # functions and replace the hardcoded magic numbers by proper # defines. # # - Rework the fsleep() implementation to take the reality of the # timer wheel granularity on different HZ values into account. # Right now the boundaries are hard coded time ranges which fail # to provide the requested accuracy on different HZ settings. # # - Update documentation for all sleep/timeout related functions # and fix up stale documentation links all over the place # # - Fixup a few usage sites # # - Rework of timekeeping and adjtimex(2) to prepare for multiple PTP # clocks # # A system can have multiple PTP clocks which are participating in # seperate and independent PTP clock domains. So far the kernel only # considers the PTP clock which is based on CLOCK TAI relevant as # that's the clock which drives the timekeeping adjustments via the # various user space daemons through adjtimex(2). # # The non TAI based clock domains are accessible via the file # descriptor based posix clocks, but their usability is very limited. # They can't be accessed fast as they always go all the way out to # the hardware and they cannot be utilized in the kernel itself. # # As Time Sensitive Networking (TSN) gains traction it is required to # provide fast user and kernel space access to these clocks. # # The approach taken is to utilize the timekeeping and adjtimex(2) # infrastructure to provide this access in a similar way how the # kernel provides access to clock MONOTONIC, REALTIME etc. # # Instead of creating a duplicated infrastructure this rework # converts timekeeping and adjtimex(2) into generic functionality # which operates on pointers to data structures instead of using # static variables. # # This allows to provide time accessors and adjtimex(2) functionality # for the independent PTP clocks in a subsequent step. # # - Consolidate hrtimer initialization # # hrtimers are set up by initializing the data structure and then # seperately setting the callback function for historical reasons. # # That's an extra unnecessary step and makes Rust support less # straight forward than it should be. # # Provide a new set of hrtimer_setup*() functions and convert the # core code and a few usage sites of the less frequently used # interfaces over. # # The bulk of the htimer_init() to hrtimer_setup() conversion is # already prepared and scheduled for the next merge window. # # - Drivers: # # - Ensure that the global timekeeping clocksource is utilizing the # cluster 0 timer on MIPS multi-cluster systems. # # Otherwise CPUs on different clusters use their cluster specific # clocksource which is not guaranteed to be synchronized with # other clusters. # # - Mostly boring cleanups, fixes, improvements and code movement" # # * tag 'timers-core-2024-11-18' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (140 commits) # posix-timers: Fix spurious warning on double enqueue versus do_exit() # clocksource/drivers/arm_arch_timer: Use of_property_present() for non-boolean properties # clocksource/drivers/gpx: Remove redundant casts # clocksource/drivers/timer-ti-dm: Fix child node refcount handling # dt-bindings: timer: actions,owl-timer: convert to YAML # clocksource/drivers/ralink: Add Ralink System Tick Counter driver # clocksource/drivers/mips-gic-timer: Always use cluster 0 counter as clocksource # clocksource/drivers/timer-ti-dm: Don't fail probe if int not found # clocksource/drivers:sp804: Make user selectable # clocksource/drivers/dw_apb: Remove unused dw_apb_clockevent functions # hrtimers: Delete hrtimer_init_on_stack() # alarmtimer: Switch to use hrtimer_setup() and hrtimer_setup_on_stack() # io_uring: Switch to use hrtimer_setup_on_stack() # sched/idle: Switch to use hrtimer_setup_on_stack() # hrtimers: Delete hrtimer_init_sleeper_on_stack() # wait: Switch to use hrtimer_setup_sleeper_on_stack() # timers: Switch to use hrtimer_setup_sleeper_on_stack() # net: pktgen: Switch to use hrtimer_setup_sleeper_on_stack() # futex: Switch to use hrtimer_setup_sleeper_on_stack() # fs/aio: Switch to use hrtimer_setup_sleeper_on_stack() # ... # < /opt/cross/kisskb/korg/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --version # < git log --format=%s --max-count=1 bf9aa14fc523d2763fc9a10672a709224e8fcaf4 # make -s -j 160 ARCH=powerpc O=/kisskb/build/linus_pseries_le_defconfig+NO_NUMA_powerpc-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux- pseries_le_defconfig Using /kisskb/src/arch/powerpc/configs/ppc64_defconfig as base Merging /kisskb/src/arch/powerpc/configs/le.config Merging /kisskb/src/arch/powerpc/configs/guest.config Value of CONFIG_VIRTIO_BLK is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_VIRTIO_BLK=m New value: CONFIG_VIRTIO_BLK=y Value of CONFIG_SCSI_VIRTIO is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_SCSI_VIRTIO=m New value: CONFIG_SCSI_VIRTIO=y Value of CONFIG_VIRTIO_NET is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_VIRTIO_NET=m New value: CONFIG_VIRTIO_NET=y Value of CONFIG_VIRTIO_CONSOLE is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_VIRTIO_CONSOLE=m New value: CONFIG_VIRTIO_CONSOLE=y Value of CONFIG_VIRTIO_PCI is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_VIRTIO_PCI=m New value: CONFIG_VIRTIO_PCI=y Value of CONFIG_VIRTIO_BALLOON is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_VIRTIO_BALLOON=m New value: CONFIG_VIRTIO_BALLOON=y Value of CONFIG_VHOST_NET is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_VHOST_NET=m New value: CONFIG_VHOST_NET=y Value of CONFIG_IBMVETH is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_IBMVETH=m New value: CONFIG_IBMVETH=y Value of CONFIG_IBMVNIC is redefined by fragment /kisskb/src/arch/powerpc/configs/guest.config: Previous value: CONFIG_IBMVNIC=m New value: CONFIG_IBMVNIC=y Merging /kisskb/src/arch/powerpc/configs/kvm_guest.config # # merged configuration written to .config (needs make) # # Added to kconfig CONFIG_NUMA=n # < make -s -j 160 ARCH=powerpc O=/kisskb/build/linus_pseries_le_defconfig+NO_NUMA_powerpc-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux- help # make -s -j 160 ARCH=powerpc O=/kisskb/build/linus_pseries_le_defconfig+NO_NUMA_powerpc-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux- olddefconfig # make -s -j 160 ARCH=powerpc O=/kisskb/build/linus_pseries_le_defconfig+NO_NUMA_powerpc-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux- Completed OK # rm -rf /kisskb/build/linus_pseries_le_defconfig+NO_NUMA_powerpc-gcc13 # Build took: 0:02:36.026775