Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/arch/xen/xen
On Sun, Feb 02, 2014 at 06:53:55PM +0000, David Laight wrote:
> > It's been a while since I looked at this and I don't remmeber the details,
> > but I don't think anything of fpuinit() is neeed for Xen. in netbsd-6
> > npxattach() doens't do anything either for Xen (only set i386_fpu_present to
> > 1 and init npxdna_func, which seems to be done at compile time now).
> > I think the FPU is initialised by the hypervisor. Or it's done by
> > npxdna() on the first FPU use.
> >
> > With the code as is in HEAD now, all FPU-related atf tests pass on
> > a Xen guest with 4 CPUs, so I assume it's working as expected.
>
> Something needs to set the TS (task switched) flag when a new cpu
> is added. Both amd64 and i386 'bare metal' have direct calls to
> fpuinit() to do this.
>
> If TS isn't set the first FP process that gets migrated to that cpu
> won't fault on its first FP instruction. If it has just forked it
> probably won't care, but otherwise it will all go horribly wrong.
This is the clts/stts macros/functions, isn't it ?
For Xen, this is done with the HYPERVISOR_fpu_taskswitch() hypercall.
For the boot CPU it's done in i386_proc0_tss_ldt_init().
For other CPUs it will be done when a process is created/migrated
to this CPU in i386_tls_switch(), because (l != ci->ci_fpcurlwp)
will be true.
>
> It probably doesn't matter for the boot cpu - except that you (effectively)
> clone 'random' FP registers instead of known 'initially zero' ones.
But these are zeroed on first call to the first npxdna() call,
because the lwp won't have MDL_USEDFPU set at this time.
--
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
NetBSD: 26 ans d'experience feront toujours la difference
--
Home |
Main Index |
Thread Index |
Old Index