mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-06 17:35:20 +02:00

This reverts the following commits:0347be8c14
ANDROID: rust: disable floating point target features013c5ddc64
ANDROID: rust_binder: fix leak of name in binderfs2f4e6b1def
ANDROID: Disable warning about new bindgen3396c2131d
ANDROID: rust: use target.json for aarch641656e8d99d
ANDROID: rust: rustfmt scripts/generate_rust_target.rs42eb612b25
ANDROID: Enable Rust Binder Modulecb0bef6d8e
ANDROID: rust_binder: Switch Rust Binder to GKI Moduleb511e79bc5
ANDROID: Only warn on long symbols4a571c32cb
ANDROID: Re-enable Rust symbol export08dde7cab7
ANDROID: rust_binder: properly handle critical refcount increments39285e9a6e
ANDROID: rust_binder: split out logic for zero-to-one refcount increment76784ba7b8
ANDROID: rust_binder: don't use boolean to schedule nodes64018a934a
ANDROID: rust_binder: don't pr_warn on benign errors9ff51354fd
ANDROID: use 1.73.0b compiler prebuilted1360bdfa
ANDROID: rust_binder: fix CFI failure in rust_shrink_free_page741b6ae073
ANDROID: rust_binder: don't use default implementationsbee37573f9
ANDROID: rust_binder: add missing void arguments to binderfs files8ae6dec97f
ANDROID: rust_binder: fix ioctl_freezec9370a3cbb
ANDROID: rust_binder: return pending info for frozen async txnsf6d2f5ebcb
ANDROID: rust_binder: various minor improvementsd27c2c39fd
ANDROID: rust_binder: add elapsed to binder_logs/state9ef1712688
FROMLIST: rust: time: add Ktime306e7bafe8
FROMLIST: rust: don't select CONSTRUCTORS5424a7cb43
FROMLIST: rust: add flags for shadow call stack sanitizerc42560464f
ANDROID: binder: update Kconfig for choosing between implementations87f0a459c0
ANDROID: rust: uaccess: fix length usage in read_allc6c6be80a8
ANDROID: rust: use Rust atomics for Arc refcount282b78baf0
ANDROID: rust_binder: choose driver with kcmdline flag01ac18bd09
ANDROID: rust_binder: add binder_logs/stateec1855352b
ANDROID: rust_binder: fail if objects are out of orderac68e23d38
ANDROID: rust_binder: add vma shrinker2e4f09314c
ANDROID: rust_binder: add priority inheritance691f0f1682
ANDROID: rust_binder: add oneway spam detection6249f06992
ANDROID: rust_binder: add TF_UPDATE_TXN support50259804b1
ANDROID: rust_binder: add process freezing571343fd97
ANDROID: rust_binder: add BINDER_TYPE_FDA supportb427bc70cf
ANDROID: rust_binder: add BINDER_TYPE_FD support451e930fc0
ANDROID: rust_binder: add BINDER_TYPE_PTR supportae1d247379
ANDROID: rust_binder: send nodes in transactions892df033dc
ANDROID: rust_binder: add death notificationsfe5dea5fc7
ANDROID: rust_binder: serialize oneway transactionsb67f39008f
ANDROID: rust_binder: add non-oneway transactions98cf4f1b76
ANDROID: rust_binder: add epoll supportbb1d504151
ANDROID: rust_binder: add oneway transactions0ccb57c72d
ANDROID: rust_binder: add nodes and context managers6feafb413a
ANDROID: rust_binder: add work lists046eb3d735
ANDROID: rust_binder: add threading support0d512d37b0
ANDROID: rust_binder: add binderfs support to Rust binderadfa541d88
ANDROID: rust_binder: define a Rust binder driverb1661c9e45
ANDROID: rust: add linked list implementationec656ad4c9
ANDROID: rust: sync: add `Arc::into_unique_or_drop`b57704d237
ANDROID: rust: sync: add `ArcBorrow::from_raw`a1bb998934
ANDROID: rust: mm: add bindings for memory management67fe8ee749
FROMLIST: rust: add abstraction for `struct page`6896fba16f
FROMLIST: rust: uaccess: add typed accessors for userspace pointers881c1e2f85
FROMLIST: uaccess: always export _copy_[from|to]_user with CONFIG_RUST3629eb70a6
FROMLIST: rust: uaccess: add userspace pointers84e0b6c8ef
FROMLIST: rust: rbtree: add `RBTree::entry`c226168bb5
FROMLIST: rust: rbtree: add `RBTreeCursor`a3e1a10677
FROMLIST: rust: rbtree: add `RBTreeIteratorMut`97cbf6e271
FROMLIST: rust: rbtree: add `RBTreeIterator`adfa8383a5
FROMLIST: rust: rbtree: add red-black tree implementation backed by the C version4cb6d81d02
FROMLIST: rust: add `container_of!` macro879f437248
FROMLIST: rust: file: add abstraction for `poll_table`4aa358bcc5
FROMLIST: rust: file: add `DeferredFdCloser`8abb138ec8
FROMLIST: rust: file: add `Kuid` wrapperf764ce9b2b
FROMLIST: rust: file: add `FileDescriptorReservation`a34dbbde7c
FROMLIST: rust: security: add abstraction for secctxc0b96a7765
FROMLIST: rust: cred: add Rust abstraction for `struct cred`40eecc8bdf
FROMLIST: rust: file: add Rust abstraction for `struct file`c8ae5646c9
FROMLIST: rust: task: add `Task::current_raw`6b4006d2d7
FROMLIST: rust: types: add `NotThreadSafe`6bb35a6e52
FROMGIT: rust: sync: update integer types in CondVarbd6e290154
FROMGIT: rust: sync: add `CondVar::wait_timeout`117298b362
FROMGIT: rust: time: add msecs to jiffies conversiond6ce2b7bd7
FROMGIT: rust: sync: add `CondVar::notify_sync`495235c0f3
FROMGIT: rust: sync: `CondVar` rename "wait_list" to "wait_queue_head"4c5e3e9f01
UPSTREAM: binder: use enum for binder ioctlsfbb9dbf62c
UPSTREAM: rust: support `srctree`-relative links0f40dd3c65
UPSTREAM: rust: sync: Makes `CondVar::wait()` an uninterruptible wait5e2edfbc03
UPSTREAM: rust: macros: improve `#[vtable]` documentation8bd5093c30
UPSTREAM: rust: macros: update 'paste!' macro to accept string literals63a42cf758
UPSTREAM: rust: bindings: rename const binding using sed412965714b
UPSTREAM: rust: replace <linux/module.h> with <linux/export.h> in rust/exports.c1765f2a273
UPSTREAM: rust: kernel: str: Implement Debug for CStringfe69811059
UPSTREAM: rust: task: remove redundant explicit linkf2497a4bb0
UPSTREAM: rust: kernel: remove `#[allow(clippy::new_ret_no_self)]`a6ab1c4b59
UPSTREAM: rust: workqueue: add examples3525914f07
UPSTREAM: rust: workqueue: add `try_spawn` helper method7b431db132
UPSTREAM: rust: workqueue: implement `WorkItemPointer` for pointer typesc5e9e92b74
UPSTREAM: rust: workqueue: add helper for defining work_struct fieldsfef46ccba9
UPSTREAM: rust: workqueue: define built-in queues37fe02321c
UPSTREAM: rust: workqueue: add low-level workqueue bindingsa0c639eadc
UPSTREAM: rust: sync: add `Arc::{from_raw, into_raw}`37e90c8aef
ANDROID: rust: Enable KCFI support when available6be7b55440
ANDROID: rust: Use From instances for JSON encoder2b93c38ece
ANDROID: rust: Support arrays in target JSON4085063afb
ANDROID: rust: allow MODVERSIONS by no longer exporting symbolse019515a16
ANDROID: rust: Select rustc-1.73.0ae876716fc
FROMLIST: x86: rust: Disable entry padding with Rustb802a765fb
FROMLIST: arm64: rust: Enable Rust support for AArch64433a394399
FROMLIST: rust: Refactor the build target to allow the use of builtin targets5eb6b43401
UPSTREAM: rust: Suppress searching builtin sysroot9b8f3fdda6
UPSTREAM: rust: Ignore preserve-most functions5341e12502
UPSTREAM: x86: Enable IBT in Rust if enabled in C37481c8f5a
UPSTREAM: rust: upgrade to Rust 1.73.042092eccd9
UPSTREAM: rust: upgrade to Rust 1.72.130043aaafb
UPSTREAM: rust: arc: add explicit `drop()` around `Box::from_raw()`3365cb02fe
UPSTREAM: rust: Use grep -Ev rather than relying on GNU grep5dd966b03a
UPSTREAM: rust: Use awk instead of recent xargs8a38f60333
UPSTREAM: rust: Respect HOSTCC when linking for host Fixes:adfa541d88
("ANDROID: rust_binder: define a Rust binder driver") Change-Id: Id70e8c42c0b2b31753998c9b5d12e5c449aeafd7 Signed-off-by: Alice Ryhl <aliceryhl@google.com>
168 lines
4.6 KiB
C
168 lines
4.6 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.
|
|
*
|
|
* Even though Rust kernel modules should never use directly the bindings, some
|
|
* of these helpers need to be exported because Rust generics and inlined
|
|
* functions may not get their code generated in the crate where they are
|
|
* defined. Other helpers, called from non-inline functions, may not be
|
|
* exported, in principle. However, in general, the Rust compiler does not
|
|
* guarantee codegen will be performed for a non-inline function either.
|
|
* Therefore, this file exports all the helpers. In the future, this may be
|
|
* revisited to reduce the number of exports after the compiler is informed
|
|
* about the places codegen is required.
|
|
*
|
|
* All symbols are exported as GPL-only to guarantee no GPL-only feature is
|
|
* accidentally exposed.
|
|
*
|
|
* Sorted alphabetically.
|
|
*/
|
|
|
|
#include <kunit/test-bug.h>
|
|
#include <linux/bug.h>
|
|
#include <linux/build_bug.h>
|
|
#include <linux/err.h>
|
|
#include <linux/errname.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/refcount.h>
|
|
#include <linux/sched/signal.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/wait.h>
|
|
|
|
__noreturn void rust_helper_BUG(void)
|
|
{
|
|
BUG();
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_BUG);
|
|
|
|
void rust_helper_mutex_lock(struct mutex *lock)
|
|
{
|
|
mutex_lock(lock);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_mutex_lock);
|
|
|
|
void rust_helper___spin_lock_init(spinlock_t *lock, const char *name,
|
|
struct lock_class_key *key)
|
|
{
|
|
#ifdef CONFIG_DEBUG_SPINLOCK
|
|
__raw_spin_lock_init(spinlock_check(lock), name, key, LD_WAIT_CONFIG);
|
|
#else
|
|
spin_lock_init(lock);
|
|
#endif
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper___spin_lock_init);
|
|
|
|
void rust_helper_spin_lock(spinlock_t *lock)
|
|
{
|
|
spin_lock(lock);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_spin_lock);
|
|
|
|
void rust_helper_spin_unlock(spinlock_t *lock)
|
|
{
|
|
spin_unlock(lock);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_spin_unlock);
|
|
|
|
void rust_helper_init_wait(struct wait_queue_entry *wq_entry)
|
|
{
|
|
init_wait(wq_entry);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_init_wait);
|
|
|
|
int rust_helper_signal_pending(struct task_struct *t)
|
|
{
|
|
return signal_pending(t);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_signal_pending);
|
|
|
|
refcount_t rust_helper_REFCOUNT_INIT(int n)
|
|
{
|
|
return (refcount_t)REFCOUNT_INIT(n);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_REFCOUNT_INIT);
|
|
|
|
void rust_helper_refcount_inc(refcount_t *r)
|
|
{
|
|
refcount_inc(r);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_refcount_inc);
|
|
|
|
bool rust_helper_refcount_dec_and_test(refcount_t *r)
|
|
{
|
|
return refcount_dec_and_test(r);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_refcount_dec_and_test);
|
|
|
|
__force void *rust_helper_ERR_PTR(long err)
|
|
{
|
|
return ERR_PTR(err);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_ERR_PTR);
|
|
|
|
bool rust_helper_IS_ERR(__force const void *ptr)
|
|
{
|
|
return IS_ERR(ptr);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_IS_ERR);
|
|
|
|
long rust_helper_PTR_ERR(__force const void *ptr)
|
|
{
|
|
return PTR_ERR(ptr);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_PTR_ERR);
|
|
|
|
const char *rust_helper_errname(int err)
|
|
{
|
|
return errname(err);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_errname);
|
|
|
|
struct task_struct *rust_helper_get_current(void)
|
|
{
|
|
return current;
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_get_current);
|
|
|
|
void rust_helper_get_task_struct(struct task_struct *t)
|
|
{
|
|
get_task_struct(t);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_get_task_struct);
|
|
|
|
void rust_helper_put_task_struct(struct task_struct *t)
|
|
{
|
|
put_task_struct(t);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_put_task_struct);
|
|
|
|
struct kunit *rust_helper_kunit_get_current_test(void)
|
|
{
|
|
return kunit_get_current_test();
|
|
}
|
|
EXPORT_SYMBOL_GPL(rust_helper_kunit_get_current_test);
|
|
|
|
/*
|
|
* `bindgen` binds the C `size_t` type as the Rust `usize` type, so we can
|
|
* use it in contexts where Rust expects a `usize` like slice (array) indices.
|
|
* `usize` is defined to be the same as C's `uintptr_t` type (can hold any
|
|
* pointer) but not necessarily the same as `size_t` (can hold the size of any
|
|
* single object). Most modern platforms use the same concrete integer type for
|
|
* both of them, but in case we find ourselves on a platform where
|
|
* that's not true, fail early instead of risking ABI or
|
|
* integer-overflow issues.
|
|
*
|
|
* If your platform fails this assertion, it means that you are in
|
|
* danger of integer-overflow bugs (even if you attempt to add
|
|
* `--no-size_t-is-usize`). It may be easiest to change the kernel ABI on
|
|
* your platform such that `size_t` matches `uintptr_t` (i.e., to increase
|
|
* `size_t`, because `uintptr_t` has to be at least as big as `size_t`).
|
|
*/
|
|
static_assert(
|
|
sizeof(size_t) == sizeof(uintptr_t) &&
|
|
__alignof__(size_t) == __alignof__(uintptr_t),
|
|
"Rust code expects C `size_t` to match Rust `usize`"
|
|
);
|