# 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/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux-gcc --version # < /opt/cross/kisskb/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux-ld --version # < git log --format=%s --max-count=1 bf9aa14fc523d2763fc9a10672a709224e8fcaf4 # make -s -j 40 ARCH=um O=/kisskb/build/linus_allyesconfig_um-x86_64-gcc12 CROSS_COMPILE=/opt/cross/kisskb/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux- SUBARCH=x86_64 allyesconfig # Added to kconfig CONFIG_STANDALONE=y # Added to kconfig CONFIG_KCOV=n # Added to kconfig CONFIG_GCC_PLUGINS=n # Added to kconfig CONFIG_GCC_PLUGIN_CYC_COMPLEXITY=n # Added to kconfig CONFIG_GCC_PLUGIN_SANCOV=n # Added to kconfig CONFIG_GCC_PLUGIN_LATENT_ENTROPY=n # Added to kconfig CONFIG_GCC_PLUGIN_STRUCTLEAK=n # Added to kconfig CONFIG_GCC_PLUGIN_RANDSTRUCT=n # Added to kconfig CONFIG_UML_NET=n # Added to kconfig CONFIG_UML_NET_ETHERTAP=n # Added to kconfig CONFIG_UML_NET_TUNTAP=n # Added to kconfig CONFIG_UML_NET_SLIP=n # Added to kconfig CONFIG_UML_NET_DAEMON=n # Added to kconfig CONFIG_UML_NET_VDE=n # Added to kconfig CONFIG_UML_NET_MCAST=n # Added to kconfig CONFIG_UML_NET_PCAP=n # Added to kconfig CONFIG_UML_NET_SLIRP=n # Added to kconfig CONFIG_GCOV_KERNEL=n # Added to kconfig CONFIG_DEBUG_INFO_BTF=n # Added to kconfig CONFIG_BPF_PRELOAD=n # Added to kconfig CONFIG_SPI_STM32_QSPI=n # < make -s -j 40 ARCH=um O=/kisskb/build/linus_allyesconfig_um-x86_64-gcc12 CROSS_COMPILE=/opt/cross/kisskb/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux- SUBARCH=x86_64 help # make -s -j 40 ARCH=um O=/kisskb/build/linus_allyesconfig_um-x86_64-gcc12 CROSS_COMPILE=/opt/cross/kisskb/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux- SUBARCH=x86_64 olddefconfig .config:15124:warning: override: reassigning to symbol GCC_PLUGIN_LATENT_ENTROPY .config:15128:warning: override: reassigning to symbol UML_NET_ETHERTAP .config:15130:warning: override: reassigning to symbol UML_NET_SLIP .config:15133:warning: override: reassigning to symbol UML_NET_MCAST # make -s -j 40 ARCH=um O=/kisskb/build/linus_allyesconfig_um-x86_64-gcc12 CROSS_COMPILE=/opt/cross/kisskb/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux- SUBARCH=x86_64 /kisskb/src/lib/iomap.c:156:5: error: no previous prototype for ‘ioread64_lo_hi’ [-Werror=missing-prototypes] 156 | u64 ioread64_lo_hi(const void __iomem *addr) | ^~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:163:5: error: no previous prototype for ‘ioread64_hi_lo’ [-Werror=missing-prototypes] 163 | u64 ioread64_hi_lo(const void __iomem *addr) | ^~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:170:5: error: no previous prototype for ‘ioread64be_lo_hi’ [-Werror=missing-prototypes] 170 | u64 ioread64be_lo_hi(const void __iomem *addr) | ^~~~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:178:5: error: no previous prototype for ‘ioread64be_hi_lo’ [-Werror=missing-prototypes] 178 | u64 ioread64be_hi_lo(const void __iomem *addr) | ^~~~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:264:6: error: no previous prototype for ‘iowrite64_lo_hi’ [-Werror=missing-prototypes] 264 | void iowrite64_lo_hi(u64 val, void __iomem *addr) | ^~~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:272:6: error: no previous prototype for ‘iowrite64_hi_lo’ [-Werror=missing-prototypes] 272 | void iowrite64_hi_lo(u64 val, void __iomem *addr) | ^~~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:280:6: error: no previous prototype for ‘iowrite64be_lo_hi’ [-Werror=missing-prototypes] 280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr) | ^~~~~~~~~~~~~~~~~ /kisskb/src/lib/iomap.c:288:6: error: no previous prototype for ‘iowrite64be_hi_lo’ [-Werror=missing-prototypes] 288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr) | ^~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[4]: *** [/kisskb/src/scripts/Makefile.build:229: lib/iomap.o] Error 1 make[3]: *** [/kisskb/src/scripts/Makefile.build:478: lib] Error 2 make[3]: *** Waiting for unfinished jobs.... make[2]: *** [/kisskb/src/Makefile:1936: .] Error 2 make[1]: *** [/kisskb/src/Makefile:224: __sub-make] Error 2 make: *** [Makefile:224: __sub-make] Error 2 Command 'make -s -j 40 ARCH=um O=/kisskb/build/linus_allyesconfig_um-x86_64-gcc12 CROSS_COMPILE=/opt/cross/kisskb/x86-64--glibc--bleeding-edge-2022.08-1/bin/x86_64-linux- SUBARCH=x86_64 ' returned non-zero exit status 2. # rm -rf /kisskb/build/linus_allyesconfig_um-x86_64-gcc12 # Build took: 0:09:37.656607