patch-2.3.23 linux/arch/arm/nwfpe/ChangeLog

Next file: linux/arch/arm/nwfpe/Makefile
Previous file: linux/arch/arm/mm/proc-sa110.S
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.22/linux/arch/arm/nwfpe/ChangeLog linux/arch/arm/nwfpe/ChangeLog
@@ -1,10 +1,50 @@
-1998-11-23  Scott Bambrough  <scottb@corelcomputer.com>
+1999-08-19  Scott Bambrough  <scottb@netwinder.org>
+
+	* fpmodule.c - Changed version number to 0.95
+	* fpa11.h - modified FPA11, FPREG structures
+	* fpa11.c - Changes due to FPA11, FPREG structure alterations.
+	* fpa11_cpdo.c - Changes due to FPA11, FPREG structure alterations.
+	* fpa11_cpdt.c - Changes due to FPA11, FPREG structure alterations.
+	* fpa11_cprt.c - Changes due to FPA11, FPREG structure alterations.
+	* single_cpdo.c - Changes due to FPA11, FPREG structure alterations.
+	* double_cpdo.c - Changes due to FPA11, FPREG structure alterations.
+	* extended_cpdo.c - Changes due to FPA11, FPREG structure alterations.
+
+	* I discovered several bugs.  First and worst is that the kernel
+	  passes in a pointer to the FPE's state area.	This is defined
+	  as a struct user_fp (see user.h).  This pointer was cast to a
+	  FPA11*.  Unfortunately FPA11 and user_fp are of different sizes;
+	  user_fp is smaller.  This meant that the FPE scribbled on things
+	  below its area, which is bad, as the area is in the thread_struct
+	  embedded in the process task structure.  Thus we were scribbling
+	  over one of the most important structures in the entire OS.
+
+	* user_fp and FPA11 have now been harmonized.  Most of the changes
+	  in the above code were dereferencing problems due to moving the
+	  register type out of FPREG, and getting rid of the union variable
+	  fpvalue.
+
+	* Second I noticed resetFPA11 was not always being called for a
+	  task.  This should happen on the first floating point exception
+	  that occurs.	It is controlled by init_flag in FPA11.  The
+	  comment in the code beside init_flag state the kernel guarantees
+	  this to be zero.  Not so.  I found that the kernel recycles task
+	  structures, and that recycled ones may not have init_flag zeroed.
+	  I couldn't even find anything that guarantees it is zeroed when
+	  when the task structure is initially allocated.  In any case
+	  I now initialize the entire FPE state in the thread structure to
+	  zero when allocated and recycled.  See alloc_task_struct() and
+	  flush_thread() in arch/arm/process.c.  The change to
+	  alloc_task_struct() may not be necessary, but I left it in for
+	  completeness (better safe than sorry).
+
+1998-11-23  Scott Bambrough  <scottb@netwinder.org>
 
 	* README.FPE - fix typo in description of lfm/sfm instructions
 	* NOTES - Added file to describe known bugs/problems 
 	* fpmodule.c - Changed version number to 0.94
 
-1998-11-20  Scott Bambrough  <scottb@corelcomputer.com>
+1998-11-20  Scott Bambrough  <scottb@netwinder.org>
 
 	* README.FPE - fix description of URD, NRM instructions
 	* TODO - remove URD, NRM instructions from TODO list
@@ -12,7 +52,7 @@
 	* double_cpdo.c - implement URD, NRM
 	* extended_cpdo.c - implement URD, NRM
 
-1998-11-19  Scott Bambrough  <scottb@corelcomputer.com>
+1998-11-19  Scott Bambrough  <scottb@netwinder.org>
 
 	* ChangeLog - Added this file to track changes made.
 	* fpa11.c - added code to initialize register types to typeNone

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)