linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Ramon de C Valle <rcvalle@google.com>
Cc: "Peter Zijlstra" <peterz@infradead.org>,
	"Kees Cook" <keescook@chromium.org>,
	"Sami Tolvanen" <samitolvanen@google.com>,
	"Miguel Ojeda" <miguel.ojeda.sandonis@gmail.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, patches@lists.linux.dev,
	"Jarkko Sakkinen" <jarkko@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@google.com>,
	"David Gow" <davidgow@google.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	linux-doc@vger.kernel.org
Subject: Re: [PATCH v10 25/27] x86: enable initial Rust support
Date: Fri, 13 Oct 2023 11:54:46 -0700	[thread overview]
Message-ID: <CAHk-=wjLUit_gae7anFNz4sV0o2Uc=TD_9P8sYeqMSeW_UG2Rg@mail.gmail.com> (raw)
In-Reply-To: <CAOcBZOTP_vQuFaqREqy-hkG69aBvJ+xrhEQi_EFKvtsNjne1dw@mail.gmail.com>

On Fri, 13 Oct 2023 at 05:18, Ramon de C Valle <rcvalle@google.com> wrote:
>
> Both C and repr(C) Rust structs have this encoding, but I understand
> the problems with doing this in C since it doesn't have
> repr(transparent) structs so there would be a lot of casting back and
> forth. Maybe there is an alternative or this could be done for less
> used function pairs?

We actually have some C variations of what I think people want to use
"repr(transparent) struct" for in Rust.

Of course, that is depending on what kind of context you want to use
it for, and I might have lost some background. But I'm assuming you're
talking about the situation where you want to treat two or more types
as being "compatible" within certain contexts.

There's the actual standard C "_Generic()" alternative, which allows
you to make macros etc that use different types transparently.

It's not very widely used in the kernel, because we only fairly
recently moved to require recent enough compiler versions, but we do
use it now in a couple of places.

And there's the much more traditional gcc extension in the form of the
__attribute__((__transparent_union__)) thing. In the kernel, that one
is even less used, and that one use is likely going away since the
need for it is going away.

But while it's not standard C, it's actually been supported by
relevant compilers for much longer than "_Generic" has, and is
designed exactly for the "I have a function that can take arguments of
different types", either because the types are bitwise identical (even
if _conceptually_ not the same), or simply because you have a
different argument that describes the type (the traditional C union
model).

I suspect, for example, that we *should* have used those transparent
unions for the "this function can take either a folio or a page" case,
instead of duplicating functions for the two uses.

But probably because few people aren familiar with the syntax, that's
not what happened.

             Linus

  reply	other threads:[~2023-10-13 18:55 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27 13:14 [PATCH v10 00/27] Rust support Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 01/27] kallsyms: use `ARRAY_SIZE` instead of hardcoded size Miguel Ojeda
2022-09-27 14:05   ` Geert Stappers
2022-09-27 14:51   ` Greg Kroah-Hartman
2022-09-28 14:58   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 02/27] kallsyms: avoid hardcoding buffer size Miguel Ojeda
2022-09-27 14:52   ` Greg Kroah-Hartman
2022-09-28 14:59   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 03/27] kallsyms: add static relationship between `KSYM_NAME_LEN{,_BUFFER}` Miguel Ojeda
2022-09-27 14:54   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 04/27] kallsyms: support "big" kernel symbols Miguel Ojeda
2022-09-27 14:55   ` Greg Kroah-Hartman
2022-10-29 17:41   ` Guenter Roeck
2022-10-29 18:23     ` Guenter Roeck
2022-09-27 13:14 ` [PATCH v10 05/27] kallsyms: increase maximum kernel symbol length to 512 Miguel Ojeda
2022-09-27 14:56   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 06/27] rust: add C helpers Miguel Ojeda
2022-09-27 14:59   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 07/27] rust: import upstream `alloc` crate Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 08/27] rust: adapt `alloc` crate to the kernel Miguel Ojeda
2022-09-27 13:51   ` Konstantin Shelekhin
2022-09-27 14:06     ` Miguel Ojeda
2022-09-27 15:13       ` Konstantin Shelekhin
2022-09-27 16:01         ` Miguel Ojeda
2022-09-27 15:35   ` Greg Kroah-Hartman
2022-09-28 15:10   ` Wei Liu
2022-09-28 15:25     ` Miguel Ojeda
2022-09-28 15:27       ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 09/27] rust: add `compiler_builtins` crate Miguel Ojeda
2022-09-28 13:25   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 10/27] rust: add `macros` crate Miguel Ojeda
2022-09-27 13:48   ` Konstantin Shelekhin
2022-09-27 13:59     ` Geert Stappers
2022-09-27 14:01     ` Miguel Ojeda
2022-09-28 15:29   ` Wei Liu
2022-09-28 16:36     ` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 11/27] rust: add `bindings` crate Miguel Ojeda
2022-09-27 15:23   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 12/27] rust: add `kernel` crate Miguel Ojeda
2022-09-27 15:22   ` Greg Kroah-Hartman
2022-09-27 15:36     ` Alex Gaynor
2022-09-27 15:43     ` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 13/27] rust: export generated symbols Miguel Ojeda
2022-09-27 15:32   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 14/27] vsprintf: add new `%pA` format specifier Miguel Ojeda
2022-09-27 15:00   ` Greg Kroah-Hartman
2022-09-28 10:09   ` Sergey Senozhatsky
2022-09-27 13:14 ` [PATCH v10 15/27] scripts: checkpatch: diagnose uses of `%pA` in the C side as errors Miguel Ojeda
2022-09-27 15:03   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 16/27] scripts: checkpatch: enable language-independent checks for Rust Miguel Ojeda
2022-09-27 15:02   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 17/27] scripts: decode_stacktrace: demangle Rust symbols Miguel Ojeda
2022-09-27 15:02   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 18/27] scripts: add `generate_rust_analyzer.py` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 19/27] scripts: add `generate_rust_target.rs` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 20/27] scripts: add `rust_is_available.sh` Miguel Ojeda
2022-09-28 14:49   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 21/27] scripts: add `is_rust_module.sh` Miguel Ojeda
2022-09-27 15:26   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 22/27] rust: add `.rustfmt.toml` Miguel Ojeda
2022-09-28 13:30   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 23/27] Kbuild: add Rust support Miguel Ojeda
2022-09-27 15:30   ` Greg Kroah-Hartman
2022-09-28 14:56   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 24/27] docs: add Rust documentation Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 25/27] x86: enable initial Rust support Miguel Ojeda
2022-09-27 15:31   ` Greg Kroah-Hartman
2022-09-28 14:32   ` Wei Liu
2022-09-28 16:39     ` Miguel Ojeda
2022-10-07 17:17   ` Peter Zijlstra
2022-10-10 23:15     ` Sami Tolvanen
2022-10-11  8:04       ` Peter Zijlstra
2022-10-14 17:23         ` Miguel Ojeda
2022-10-14 17:25           ` Boqun Feng
2022-10-14 18:05       ` Miguel Ojeda
2022-10-14 18:34         ` Sami Tolvanen
2022-10-14 20:39           ` Miguel Ojeda
2023-10-09 16:00             ` Matthew Maurer
2023-10-09 16:31               ` Miguel Ojeda
2023-10-09 17:37                 ` Greg Kroah-Hartman
2023-10-12 10:47           ` Peter Zijlstra
2023-10-12 17:50             ` Sami Tolvanen
2023-10-12 18:31               ` Kees Cook
2023-10-12 22:26                 ` Ramon de C Valle
     [not found]                 ` <CAOcBZOTed1a1yOimdUN9yuuysZ1h6VXa57+5fLAE99SZxCwBMQ@mail.gmail.com>
2023-10-13  7:50                   ` Peter Zijlstra
2023-10-13 12:17                     ` Ramon de C Valle
2023-10-13 18:54                       ` Linus Torvalds [this message]
2023-10-13 19:00                         ` H. Peter Anvin
2023-10-13 19:22                           ` Linus Torvalds
2023-10-14 20:25                           ` comex
2023-10-14 20:50                             ` H. Peter Anvin
2022-09-27 13:14 ` [PATCH v10 26/27] samples: add first Rust examples Miguel Ojeda
2022-09-27 15:25   ` Greg Kroah-Hartman
2022-09-28 14:23   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 27/27] MAINTAINERS: Rust Miguel Ojeda
2022-09-27 14:11   ` Geert Stappers
2022-09-27 15:19     ` Kees Cook
2022-09-27 15:34       ` Greg Kroah-Hartman
2022-09-27 15:53         ` Miguel Ojeda
2022-09-27 16:39           ` Greg Kroah-Hartman
2022-09-27 18:14             ` Kees Cook
2022-09-28  0:11           ` Kees Cook
2022-09-28 11:57             ` Wedson Almeida Filho
2022-09-28 12:22               ` Miguel Ojeda
2022-09-27 16:00       ` Wedson Almeida Filho
2022-09-27 16:38   ` Greg Kroah-Hartman
2022-09-28 15:06 ` [PATCH v10 00/27] Rust support Wei Liu
2022-09-28 15:34   ` Miguel Ojeda
2022-09-28 15:40     ` Wei Liu

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='CAHk-=wjLUit_gae7anFNz4sV0o2Uc=TD_9P8sYeqMSeW_UG2Rg@mail.gmail.com' \
    --to=torvalds@linux-foundation.org \
    --cc=alex.gaynor@gmail.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=davidgow@google.com \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=jarkko@kernel.org \
    --cc=keescook@chromium.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miguel.ojeda.sandonis@gmail.com \
    --cc=mingo@redhat.com \
    --cc=ojeda@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=peterz@infradead.org \
    --cc=rcvalle@google.com \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=samitolvanen@google.com \
    --cc=tglx@linutronix.de \
    --cc=wedsonaf@google.com \
    --cc=x86@kernel.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).