mirror of
https://github.com/torvalds/linux
synced 2026-07-22 18:20:51 +09:00
Pull s390 updates from Alexander Gordeev: - Use CIO device online variable instead of the internal FSM state to determine device availability during purge operations - Remove extra check of task_stack_page() because try_get_task_stack() already takes care of that when reading /proc/<pid>/wchan - Allow user-space to use the new SCLP action qualifier 4 for to provide NVMe SMART log data to the platform. - Send AP CHANGE uevents on successful bind and successful association to notify user-space about SE operations on AP queue devices - Add an s390dbf kernel parameter to configure debug log levels and area sizes during early boot - On arm64 the empty zero page is going to be mapped read-only. Do the same for s390 with an explicit set_memory_ro() call - Improve s390-specific bcr_serialize() and cpu_relax() implementations - Remove all unused variables to avoid allmodconfig W=1 build fails with latest clang-23 - Cleanup default Kconfig values for s390 selftests - Add a s390-tod trace clock to allow comparing trace timestamps between different systems or virtual machines on s390 - Remove the s390 implementation of strlcat() in favor of the generic variant - Make consistent the calling order between page_table_check_pte_clear() and secure page conversion across all code paths - Rearrange some fields within AP and zcrypt structs to reduce memory consumption and unused holes - Shorten GR_NUM and VX_NUM macros and move them to a separate header - Replace __get_free_page() with kmalloc() in few sources - Introduce an infrastructure for more efficient this_cpu operations. Eliminate conditional branches when PREEMPT_NONE is removed - Enable Rust support - Use z10 as minimum architecture level, similar to the boot code, to enforce a defined architecture level set - Improve and convert various mem*() helper functions to C. For that add .noinstr.text section to avoid orphaned warnings from the linker - Fix the function pointer type in __ret_from_fork() to correct the indirect call to match kernel thread return type of int - Revert support for DCACHE_WORD_ACCESS to avoid an endless exception loop on read from donated Ultravisor pages at unaligned addresses * tag 's390-7.2-1' of gitolite.kernel.org:pub/scm/linux/kernel/git/s390/linux: (52 commits) s390: Revert support for DCACHE_WORD_ACCESS s390/process: Fix kernel thread function pointer type s390/tishift: Convert __ashlti3(), __ashrti3(), __lshrti3() to C s390/memmove: Optimize backward copy case s390/string: Convert memset(16|32|64)() to C s390/string: Convert memcpy() to C s390/string: Convert memset() to C s390/string: Convert memmove() to C s390/string: Add -ffreestanding compile option to string.o s390: Add .noinstr.text to boot and purgatory linker scripts s390/purgatory: Enforce z10 minimum architecture level s390: Enable Rust support s390/cmpxchg: Fix KASAN stack-out-of-bounds in atomic helpers rust: helpers: Add memchr wrapper for string operations rust/bindgen_parameters: Mark s390 types as opaque to prevent repr conflicts s390/jump_label: Implement ARCH_STATIC_BRANCH_JUMP_ASM and ARCH_STATIC_BRANCH_ASM macros s390/bug: Provide ARCH_WARN_ASM for Rust WARN/BUG support s390/ap: Fix locking issue in SE bind and associate sysfs functions s390/percpu: Provide arch_this_cpu_write() implementation s390/percpu: Provide arch_this_cpu_read() implementation ...
102 lines
2.9 KiB
C
102 lines
2.9 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Non-trivial C macros cannot be used in Rust. Similarly, inlined C functions
|
|
* cannot be called either. This file explicitly creates functions ("helpers")
|
|
* that wrap those so that they can be called from Rust.
|
|
*
|
|
* Sorted alphabetically.
|
|
*/
|
|
|
|
#include <linux/compiler_types.h>
|
|
|
|
#ifdef __BINDGEN__
|
|
// Omit `inline` for bindgen as it ignores inline functions.
|
|
#define __rust_helper
|
|
#else
|
|
// The helper functions are all inline functions.
|
|
//
|
|
// We use `__always_inline` here to bypass LLVM inlining checks, in case the
|
|
// helpers are inlined directly into Rust CGUs.
|
|
//
|
|
// The LLVM inlining checks are false positives:
|
|
// * LLVM doesn't want to inline functions compiled with
|
|
// `-fno-delete-null-pointer-checks` with code compiled without.
|
|
// The C CGUs all have this enabled and Rust CGUs don't. Inlining is okay
|
|
// since this is one of the hardening features that does not change the ABI,
|
|
// and we shouldn't have null pointer dereferences in these helpers.
|
|
// * LLVM doesn't want to inline functions with different list of builtins. C
|
|
// side has `-fno-builtin-wcslen`; `wcslen` is not a Rust builtin, so they
|
|
// should be compatible, but LLVM does not perform inlining due to attributes
|
|
// mismatch.
|
|
// * clang and Rust doesn't have the exact target string. Clang generates
|
|
// `+cmov,+cx8,+fxsr` but Rust doesn't enable them (in fact, Rust will
|
|
// complain if `-Ctarget-feature=+cmov,+cx8,+fxsr` is used). x86-64 always
|
|
// enable these features, so they are in fact the same target string, but
|
|
// LLVM doesn't understand this and so inlining is inhibited. This can be
|
|
// bypassed with `--ignore-tti-inline-compatible`, but this is a hidden
|
|
// option.
|
|
#define __rust_helper __always_inline
|
|
#endif
|
|
|
|
#include "acpi.c"
|
|
#include "atomic.c"
|
|
#include "atomic_ext.c"
|
|
#include "auxiliary.c"
|
|
#include "barrier.c"
|
|
#include "binder.c"
|
|
#include "bitmap.c"
|
|
#include "bitops.c"
|
|
#include "blk.c"
|
|
#include "bug.c"
|
|
#include "build_assert.c"
|
|
#include "build_bug.c"
|
|
#include "clk.c"
|
|
#include "completion.c"
|
|
#include "cpu.c"
|
|
#include "cpufreq.c"
|
|
#include "cpumask.c"
|
|
#include "cred.c"
|
|
#include "device.c"
|
|
#include "dma.c"
|
|
#include "dma-resv.c"
|
|
#include "drm.c"
|
|
#include "err.c"
|
|
#include "irq.c"
|
|
#include "fs.c"
|
|
#include "gpu.c"
|
|
#include "io.c"
|
|
#include "jump_label.c"
|
|
#include "kunit.c"
|
|
#include "list.c"
|
|
#include "maple_tree.c"
|
|
#include "mm.c"
|
|
#include "mutex.c"
|
|
#include "of.c"
|
|
#include "page.c"
|
|
#include "pci.c"
|
|
#include "pid_namespace.c"
|
|
#include "platform.c"
|
|
#include "poll.c"
|
|
#include "processor.c"
|
|
#include "property.c"
|
|
#include "pwm.c"
|
|
#include "rbtree.c"
|
|
#include "rcu.c"
|
|
#include "refcount.c"
|
|
#include "regulator.c"
|
|
#include "scatterlist.c"
|
|
#include "security.c"
|
|
#include "signal.c"
|
|
#include "slab.c"
|
|
#include "spinlock.c"
|
|
#include "string.c"
|
|
#include "sync.c"
|
|
#include "task.c"
|
|
#include "time.c"
|
|
#include "uaccess.c"
|
|
#include "usb.c"
|
|
#include "vmalloc.c"
|
|
#include "wait.c"
|
|
#include "workqueue.c"
|
|
#include "xarray.c"
|