linux/include/asm-ppc
David Gibson 25c8a78b1e [PATCH] powerpc: Fix handling of fpscr on 64-bit
The recent merge of fpu.S broken the handling of fpscr for
ARCH=powerpc and CONFIG_PPC64=y.  FP registers could be corrupted,
leading to strange random application crashes.

The confusion arises, because the thread_struct has (and requires) a
64-bit area to save the fpscr, because we use load/store double
instructions to get it in to/out of the FPU.  However, only the low
32-bits are actually used, so we want to treat it as a 32-bit quantity
when manipulating its bits to avoid extra load/stores on 32-bit.  This
patch replaces the current definition with a structure of two 32-bit
quantities (pad and val), to clarify things as much as is possible.
The 'val' field is used when manipulating bits, the structure itself
is used when obtaining the address for loading/unloading the value
from the FPU.

While we're at it, consolidate the 4 (!) almost identical versions of
cvt_fd() and cvt_df() (arch/ppc/kernel/misc.S,
arch/ppc64/kernel/misc.S, arch/powerpc/kernel/misc_32.S,
arch/powerpc/kernel/misc_64.S) into a single version in fpu.S.  The
new version takes a pointer to thread_struct and applies the correct
offset itself, rather than a pointer to the fpscr field itself, again
to avoid confusion as to which is the correct field to use.

Finally, this patch makes ARCH=ppc64 also use the consolidated fpu.S
code, which it previously did not.

Built for G5 (ARCH=ppc64 and ARCH=powerpc), 32-bit powermac (ARCH=ppc
and ARCH=powerpc) and Walnut (ARCH=ppc, CONFIG_MATH_EMULATION=y).
Booted on G5 (ARCH=powerpc) and things which previously fell over no
longer do.

Signed-off-by: David Gibson <dwg@au1.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2005-10-27 20:48:50 +10:00
..
8xx_immap.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
amigahw.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
amigaints.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
amigappc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
amigayle.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
amipcmcia.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ans-lcd.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bitops.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bootinfo.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bootx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bseip.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
btext.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cache.h ppc32: use L1_CACHE_SHIFT/L1_CACHE_BYTES 2005-10-17 11:50:32 +10:00
cacheflush.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
commproc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cpm2.h [PATCH] ppc32: Add proper prototype for cpm2_reset() 2005-07-27 16:25:55 -07:00
current.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
delay.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dma-mapping.h [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
floppy.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
futex.h [PATCH] Remove unused var from asm/futex.h 2005-09-21 16:16:29 -07:00
gg2.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gt64260_defs.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gt64260.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
harrier.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hawk_defs.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hawk.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
highmem.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hydra.h [PATCH] ppc trivial iomem annotations: chrp 2005-04-24 14:58:08 -07:00
ibm4xx.h [PATCH] ppc32: Remove board support for REDWOOD 2005-09-05 00:05:54 -07:00
ibm44x.h [PATCH] ppc32: Fix PPC440SP SRAM controller DCRs 2005-08-18 12:53:58 -07:00
ibm403.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ibm405.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ibm_ocp_pci.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ibm_ocp.h [PATCH] ppc32: add missing sysfs node for ocp_func_emac_data.phy_feat_exc 2005-09-07 16:57:15 -07:00
ide.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
immap_85xx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
immap_cpm2.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
io.h Merge from Linus' tree 2005-10-12 14:43:32 +10:00
ipcbuf.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ipic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kexec.h [PATCH] kexec-ppc: fix for ksysfs crash_notes 2005-07-12 16:01:03 -07:00
kgdb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
m48t35.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
m8260_pci.h [PATCH] ppc32: Support for 82xx PQII on-chip PCI bridge 2005-05-28 16:46:15 -07:00
machdep.h powerpc/ppc/ppc64: Various compile fixes. 2005-10-20 21:10:09 +10:00
md.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mk48t59.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mmu_context.h [PATCH] powerpc: merged asm/cputable.h 2005-09-28 15:42:53 +10:00
mmu.h [PATCH] ppc32: Add support for Freescale e200 (Book-E) core 2005-06-25 16:24:26 -07:00
mpc8xx.h [PATCH] ppc32: Add ppc_sys descriptions for PowerQUICC I devices 2005-09-17 11:50:01 -07:00
mpc10x.h [PATCH] ppc32: Make the UARTs on MPC824x individual platform devices 2005-07-27 16:25:55 -07:00
mpc52xx_psc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mpc52xx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mpc83xx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mpc85xx.h [PATCH] ppc32: Added support for all MPC8548 internal interrupts 2005-06-21 18:46:24 -07:00
mpc8260_pci9.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mpc8260.h [PATCH] ppc32: Add ppc_sys descriptions for PowerQUICC II devices 2005-09-05 00:05:56 -07:00
mv64x60_defs.h [PATCH] ppc32: mv64x60 updates & enhancements 2005-09-05 00:06:00 -07:00
mv64x60.h [PATCH] mv64x60 iomem annotations 2005-09-29 08:46:27 -07:00
nvram.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ocp_ids.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ocp.h [PATCH] ppc32: Remove FSL OCP support 2005-06-25 16:24:27 -07:00
open_pic.h powerpc/ppc/ppc64: Various compile fixes. 2005-10-20 21:10:09 +10:00
page.h powerpc: Merge lmb.c and make MM initialization use it. 2005-10-06 12:23:33 +10:00
parport.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pc_serial.h [PATCH] Serial: Split 8250 port table (part 2) 2005-06-29 18:45:19 +01:00
pci-bridge.h powerpc: Fix compilation for 32-bit configs 2005-10-10 22:58:10 +10:00
pci.h ppc: rename pci_assign_all_busses to pci_assign_all_buses 2005-10-20 20:57:05 +10:00
pgalloc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pgtable.h [PATCH] feature removal of io_remap_page_range() 2005-09-13 08:22:33 -07:00
pnp.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ppc4xx_dma.h [PATCH] ppc32: fix ppc4xx stb03xxx dma build 2005-08-18 12:53:58 -07:00
ppc4xx_pic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ppc_sys.h [PATCH] ppc32: Add ppc_sys descriptions for PowerQUICC I devices 2005-09-17 11:50:01 -07:00
ppcboot.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prep_nvram.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prom.h [PATCH] ppc32: fix compilation error in include/asm/prom.h 2005-04-16 15:24:28 -07:00
ptrace.h [PATCH] powerpc: Merge thread_info.h 2005-10-21 22:47:23 +10:00
raven.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
reg_booke.h [PATCH] ppc32: Add support for Freescale e200 (Book-E) core 2005-06-25 16:24:26 -07:00
residual.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rheap.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rtc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
serial.h [PATCH] ppc32: Remove board support for MCPN765 2005-09-05 00:05:54 -07:00
sigcontext.h [PATCH] ppc32: add <linux/compiler.h> to <asm/sigcontext.h> 2005-06-06 17:02:02 -07:00
signal.h [PATCH] asm/signal.h unification 2005-05-04 07:33:15 -07:00
smp.h ppc: declare smp_ops in asm/smp.h, since platform setup code needs it 2005-10-19 23:12:01 +10:00
spinlock.h [PATCH] powerpc: Fix building of power3 config on ppc32 2005-09-25 22:38:45 +10:00
stat.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
suspend.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
system.h [PATCH] powerpc: Fix handling of fpscr on 64-bit 2005-10-27 20:48:50 +10:00
time.h [PATCH] qualifiers in return types - easy cases 2005-08-23 18:43:45 -07:00
tlb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tlbflush.h [PATCH] ppc32 8xx: flush_tlb_range() declaration uses wrong pointer type 2005-09-14 14:34:17 -07:00
todc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
traps.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
uaccess.h [PATCH] remove verify_area(): remove verify_area() from various uaccess.h headers 2005-09-07 16:57:35 -07:00
ucontext.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xparameters.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
zorro.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00