Messages in this thread | | | From | Linus Torvalds <> | Date | Thu, 14 May 2020 11:35:29 -0700 | Subject | Re: [GIT PULL] thread fixes v5.7-rc5 |
| |
On Thu, May 14, 2020 at 11:22 AM Christian Brauner <christian.brauner@ubuntu.com> wrote: > > Seemed weird to me to change something that's been exposed to userspace for that long.
Well, the internal declarations aren't actually "exposed" to user space - it's not like it's the declaration of the system call, that's separate.
And we have done that before: we have had a lot of history of using "unsigned long" to basically mean "register", and then ended up cleaning up types afterwards.
In fact, if you look at the macros that do SYSCALL_DEFINE() (hint - don't actually do it, you'll go mad) you'll see that magical __SC_LONG() thing, which actually declares _all_ arguments as either "unsigned long" or "unsigned long long".
That's the "native" representation of the low-level system call (it's also marked "asmlinkage" etc).
We then end up casting them to the internal representation with that __SC_CAST() macro.
So the actual types that we get are intentionally "cleaned up" versions of the raw registers that were passed in.
But you really don't want to understand the __SYSCALL_DEFINEx() macro. It's clever, but it really is the Cthulhu of macros. Just looking at it might drive you mad.
Linus
| |