signal 8 (floating point exception) upon resume

Adrian Chadd adrian at freebsd.org
Fri Feb 28 23:35:15 UTC 2014


... how'd this ever work in the past then?


-a


On 28 February 2014 13:08, John Baldwin <jhb at freebsd.org> wrote:
> On Friday, February 28, 2014 1:15:45 pm Adrian Chadd wrote:
>> Hi,
>>
>> On my i386 -HEAD laptops (running -HEAD as of last night, but it's
>> been a problem for a while) I occasionally hit a point where I get an
>> FPE on _all_ processes upon resume.
>>
>> I can still do a clean shutdown through the power-button method, but I
>> can't do anything else.
>>
>> Has anyone seen this before? Does anyone have an inkling of an idea
>> why I'd be getting FPE's for things like ps and sh?
>
> I'm guessing fpcurthread is stale.  We should probably be flushing
> the FPU state on suspend and starting off without any FPU state on
> resume.
>
> Ah, see this bit here in x86/acpica/acpi_wakeup.c:
>
>
> int
> acpi_sleep_machdep(struct acpi_softc *sc, int state)
> {
>         ...
>         if (savectx(susppcbs[0])) {
> #ifdef __amd64__
>                 ctx_fpusave(susppcbs[0]->pcb_fpususpend);
> #endif
>         ...
> }
>
> Looks like you need to implement ctx_fpusave() for i386.  kib@ did it as part
> of the AVX work, but I wonder if you can just steal the amd64 ctx_fpusave()
> and have it call npxsave() instead of fpxsave()?  Not sure if you'd need it to
> be in asm as it is on amd64 or if you can do this in C.
>
> --
> John Baldwin


More information about the freebsd-mobile mailing list