rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kent Overstreet <kent.overstreet@linux.dev>
To: Christian Brauner <brauner@kernel.org>
Cc: "Peter Zijlstra" <peterz@infradead.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <benno.lossin@proton.me>,
	"Andreas Hindborg" <a.hindborg@samsung.com>,
	"Alexander Viro" <viro@zeniv.linux.org.uk>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Arve Hjønnevåg" <arve@android.com>,
	"Todd Kjos" <tkjos@android.com>,
	"Martijn Coenen" <maco@android.com>,
	"Joel Fernandes" <joel@joelfernandes.org>,
	"Carlos Llamas" <cmllamas@google.com>,
	"Suren Baghdasaryan" <surenb@google.com>,
	"Dan Williams" <dan.j.williams@intel.com>,
	"Kees Cook" <keescook@chromium.org>,
	"Matthew Wilcox" <willy@infradead.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Daniel Xu" <dxu@dxuuu.xyz>,
	linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
	linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 5/7] rust: file: add `Kuid` wrapper
Date: Wed, 6 Dec 2023 14:59:11 -0500	[thread overview]
Message-ID: <20231206195911.vcp3c6q57zvkm7bf@moria.home.lan> (raw)
In-Reply-To: <20231130-wohle-einfuhr-1708e9c3e596@brauner>

On Thu, Nov 30, 2023 at 01:46:36PM +0100, Christian Brauner wrote:
> On Wed, Nov 29, 2023 at 05:48:15PM +0100, Peter Zijlstra wrote:
> > On Wed, Nov 29, 2023 at 05:28:27PM +0100, Christian Brauner wrote:
> > 
> > > > +pid_t rust_helper_task_tgid_nr_ns(struct task_struct *tsk,
> > > > +				  struct pid_namespace *ns)
> > > > +{
> > > > +	return task_tgid_nr_ns(tsk, ns);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(rust_helper_task_tgid_nr_ns);
> > > 
> > > I'm a bit puzzled by all these rust_helper_*() calls. Can you explain
> > > why they are needed? Because they are/can be static inlines and that
> > > somehow doesn't work?
> > 
> > Correct, because Rust can only talk to C ABI, it cannot use C headers.
> > Bindgen would need to translate the full C headers into valid Rust for
> > that to work.
> > 
> > I really think the Rust peoples should spend more effort on that,
> > because you are quite right, all this wrappery is tedious at best.

I suspect even if the manpower existed to go that route we'd end up
regretting it, because then the Rust compiler would need to be able to
handle _all_ the craziness a modern C compiler knows how to do -
preprocessor magic/devilry isn't even the worst of it, it gets even
worse when you start to consider things like bitfields and all the crazy
__attributes__(()) people have invented.

Swift went that route, but they have Apple funding them, and I doubt
even they would want anything to do with Linux kernel C.

IOW: yes, the extra friction from not being able to do full C -> Rust
translation is annoying now, but probably a good thing in the long run.

> The problem is that we end up with a long list of explicit exports that
> also are all really weirdly named like rust_helper_*(). I wouldn't even
> complain if it they were somehow auto-generated but as you say that
> might be out of scope.

I think we'd need help from the C side to auto generate them - what we
really want is for them to be inline, not static inline, but of course
that has never really worked for functions used across a single C file.
But maybe C compiler people are smarter these days?

Just a keyword to to tell the C compiler "take this static inline and
generate a compiled version in this .c file" would be all we need.

I could see it being handy for other things, too: as Linus has been
saying, we tend to inline too much code these days, and part of the
reason for that is we make a function inline because of the _one_
fastpath that needs it, but there's 3 more slowpaths that don't. 

And right now we don't have any sane way of having a function be
available with both inlined and outlined versions, besides the same kind
of manual wrappers the Rust people are doing here... so we should
probably just fix that.

  reply	other threads:[~2023-12-06 20:04 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-29 12:51 [PATCH 0/7] File abstractions needed by Rust Binder Alice Ryhl
2023-11-29 12:51 ` [PATCH 1/7] rust: file: add Rust abstraction for `struct file` Alice Ryhl
2023-11-29 15:13   ` Matthew Wilcox
2023-11-29 15:23     ` Peter Zijlstra
2023-11-29 17:08       ` Boqun Feng
2023-11-30 10:42         ` Peter Zijlstra
2023-11-30 15:25           ` Boqun Feng
2023-12-01  8:53             ` Peter Zijlstra
2023-12-01  9:19               ` Boqun Feng
2023-12-01  9:40                 ` Peter Zijlstra
2023-12-01 10:36                   ` Boqun Feng
2023-12-01 11:05                     ` Peter Zijlstra
2023-12-01  9:00             ` Peter Zijlstra
2023-12-01  9:52               ` Boqun Feng
2023-11-29 16:42     ` Alice Ryhl
2023-11-29 16:45       ` Peter Zijlstra
2023-11-30 15:02     ` Benno Lossin
2023-11-29 17:06   ` Christian Brauner
2023-11-29 21:27     ` Alice Ryhl
2023-11-29 23:17       ` Benno Lossin
2023-11-30 10:48       ` Christian Brauner
2023-11-30 12:10         ` Alice Ryhl
2023-11-30 12:36           ` Christian Brauner
2023-11-30 14:53   ` Benno Lossin
2023-11-30 14:59     ` Greg Kroah-Hartman
2023-11-30 15:46       ` Benno Lossin
2023-11-30 15:56         ` Greg Kroah-Hartman
2023-11-30 15:58         ` Theodore Ts'o
2023-11-30 16:12           ` Benno Lossin
2023-12-01  1:16             ` Theodore Ts'o
2023-12-01 12:11             ` David Laight
2023-12-01 12:27               ` Alice Ryhl
2023-12-01 15:04                 ` Theodore Ts'o
2023-12-01 15:14                   ` Benno Lossin
2023-12-01 17:25                     ` David Laight
2023-12-01 17:37                       ` Benno Lossin
2023-11-29 12:51 ` [PATCH 2/7] rust: cred: add Rust abstraction for `struct cred` Alice Ryhl
2023-11-30 16:17   ` Benno Lossin
2023-12-01  9:06     ` Alice Ryhl
2023-12-01 10:27       ` Christian Brauner
2023-12-04 15:42         ` Alice Ryhl
2023-11-29 13:11 ` [PATCH 3/7] rust: security: add abstraction for secctx Alice Ryhl
2023-11-30 16:26   ` Benno Lossin
2023-12-01 10:48     ` Alice Ryhl
2023-12-02 10:03       ` Benno Lossin
2023-11-29 13:11 ` [PATCH 4/7] rust: file: add `FileDescriptorReservation` Alice Ryhl
2023-11-29 16:14   ` Christian Brauner
2023-11-29 16:55     ` Alice Ryhl
2023-11-29 17:14       ` Alice Ryhl
2023-11-30  9:12         ` Christian Brauner
2023-11-30  9:23           ` Alice Ryhl
2023-11-30  9:09       ` Christian Brauner
2023-11-30  9:17         ` Alice Ryhl
2023-11-30 10:51           ` Christian Brauner
2023-11-30 11:54             ` Alice Ryhl
2023-11-30 12:17               ` Benno Lossin
2023-11-30 12:33                 ` Christian Brauner
2023-11-30 16:40   ` Benno Lossin
2023-12-01 11:32     ` Alice Ryhl
2023-11-29 13:12 ` [PATCH 5/7] rust: file: add `Kuid` wrapper Alice Ryhl
2023-11-29 16:28   ` Christian Brauner
2023-11-29 16:48     ` Peter Zijlstra
2023-11-30 12:46       ` Christian Brauner
2023-12-06 19:59         ` Kent Overstreet [this message]
2023-12-08 16:26           ` Peter Zijlstra
2023-12-08 19:58             ` Kent Overstreet
2023-12-08  5:28         ` comex
2023-12-08 16:19           ` Miguel Ojeda
2023-12-08 17:08             ` Nick Desaulniers
2023-12-08 17:37               ` Miguel Ojeda
2023-12-08 17:43               ` Boqun Feng
2023-12-08 20:43               ` Matthew Wilcox
2023-12-09  7:24             ` comex
2023-11-30  9:36     ` Alice Ryhl
2023-11-30 10:52       ` Christian Brauner
2023-11-30 10:36   ` Peter Zijlstra
2023-12-06 20:02     ` Kent Overstreet
2023-12-07  7:18       ` Greg Kroah-Hartman
2023-12-07  7:46         ` Kent Overstreet
2023-11-30 16:48   ` Benno Lossin
2023-11-29 13:12 ` [PATCH 6/7] rust: file: add `DeferredFdCloser` Alice Ryhl
2023-11-30 17:12   ` Benno Lossin
2023-12-01 11:35     ` Alice Ryhl
2023-12-02 10:16       ` Benno Lossin
2023-12-05 14:43         ` Alice Ryhl
2023-12-05 18:16           ` Alice Ryhl
2023-11-29 13:12 ` [PATCH 7/7] rust: file: add abstraction for `poll_table` Alice Ryhl
2023-11-30 17:42   ` Benno Lossin
2023-12-01 11:47     ` Alice Ryhl
2023-11-30 22:39   ` Boqun Feng
2023-12-01 11:50     ` Alice Ryhl
2023-11-30 22:50   ` Boqun Feng
2023-11-29 16:31 ` [PATCH 0/7] File abstractions needed by Rust Binder Christian Brauner
2023-11-29 16:48   ` Miguel Ojeda
2023-12-06 20:05   ` Kent Overstreet
2023-12-08 16:59     ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231206195911.vcp3c6q57zvkm7bf@moria.home.lan \
    --to=kent.overstreet@linux.dev \
    --cc=a.hindborg@samsung.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=arve@android.com \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=brauner@kernel.org \
    --cc=cmllamas@google.com \
    --cc=dan.j.williams@intel.com \
    --cc=dxu@dxuuu.xyz \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=joel@joelfernandes.org \
    --cc=keescook@chromium.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maco@android.com \
    --cc=ojeda@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=surenb@google.com \
    --cc=tglx@linutronix.de \
    --cc=tkjos@android.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=wedsonaf@gmail.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).