Re: [patch 00/13] Syslets, "Threadlets", generic AIO support, v3

Davide Libenzi
2007-03-03T02:19:48Z

On Fri, 2 Mar 2007, Nicholas Miell wrote:

> On Fri, 2007-03-02 at 16:52 -0800, Davide Libenzi wrote:
> > On Fri, 2 Mar 2007, Nicholas Miell wrote:
> >
> > > The point Ingo was making is that the x86 ABI already requires the FPU
> > > context to be saved before *all* function calls.
> >
> > I've not seen that among Ingo's points, but yeah some status is caller
> > saved. But, aren't things like status word and control bits callee saved?
> > If that's the case, it might require proper handling.
> >
>
> Ingo mentioned it in one of the parts you cut out of your reply:
>
> > and here is where thinking about threadlets as a function call and not
> > as an asynchronous context helps alot: the classic gcc convention for
> > FPU use & function calls should apply: gcc does not call an external
> > function with an in-use FPU stack/register, it always neatly unuses it,
> > as no FPU register is callee-saved, all are caller-saved.
>
> The i386 psABI is ancient (i.e. it predates SSE, so no mention of the
> XMM or MXCSR registers) and a bit vague (no mention at all of the FP
> status word), but I'm fairly certain that Ingo is right.

I'm not sure if that's the case. I'd be happy if it was, but I'm afraid
it's not. Status word and control bits should not be changed from
underneath userspace AFAIK. The ABI I remember tells me that those are
callee saved. A quick gcc asm test tells me that too.
And assuming that's the case, why don't we have a smarter unlazy_fpu()
then, that avoid FPU context sync if we're scheduled while inside a
syscall (this is no different than an enter inside sys_async_exec -
userspace should have taken care of it)?
IMO a syscall enter should not assume that userspace took care of saving
the whole FPU context.

- Davide