From: Yury Norov <redacted>
Date: Wed, 25 May 2016 23:03:27 +0300
On Wed, May 25, 2016 at 12:30:17PM -0700, David Miller wrote:
quoted
From: Yury Norov <redacted>
Date: Tue, 24 May 2016 03:04:30 +0300
quoted
+To clear that top halves, automatic wrappers are introduced. They clear all
+required registers before passing control to regular syscall handler.
Why have one of these for every single compat system call, rather than
simply clearing the top half of all of these registers unconditionally
in the 32-bit system call trap before the system call is invoked?
That's what we do on sparc64.
And with that, you only need wrappers for the case where there needs
to be proper sign extention of a 32-bit signed argument.
It was discussed as one of possible solutions. The downside of it is
that we cannot pass 64-bit types (like off_t) in single register.
Wrappers can be added for the cases where you'd like to do that.
The other downside is that we clear top halves for every single
syscall, and it looks excessive. So, from spark64 and s390 approaches
we choosed second.
It's like 4 cpu cycles even on crappy sparc64 cpus which only dual
issue. :)
And that's a pretty low cost for the benefits if you ask me.