]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Reimplement the lazy FP context switching:
authormarcel <marcel@FreeBSD.org>
Sat, 31 Oct 2009 22:27:31 +0000 (22:27 +0000)
committermarcel <marcel@FreeBSD.org>
Sat, 31 Oct 2009 22:27:31 +0000 (22:27 +0000)
commit943e1b107a9100189f9c88ee1313ce81a7ed1ba5
treecbe2460180af94e36765a193aa0c297777924c50
parent113d2ed8a6d71af32a5432b6d3892b57eaf4f0cc
Reimplement the lazy FP context switching:
o   Move all code into a single file for easier maintenance.
o   Use a single global lock to avoid having to handle either
    multiple locks or race conditions.
o   Make sure to disable the high FP registers after saving
    or dropping them.
o   use msleep() to wait for the other CPU to save the high
    FP registers.

This change fixes the high FP inconsistency panics.

A single global lock typically serializes too much, which may
be noticable when a lot of threads use the high FP registers,
but in that case it's probably better to switch the high FP
context synchronuously. Put differently: cpu_switch() should
switch the high FP registers if the incoming and outgoing
threads both use the high FP registers.
sys/conf/files.ia64
sys/ia64/ia64/highfp.c [new file with mode: 0644]
sys/ia64/ia64/interrupt.c
sys/ia64/ia64/machdep.c
sys/ia64/ia64/trap.c
sys/ia64/ia64/vm_machdep.c
sys/ia64/include/md_var.h
sys/ia64/include/proc.h