source: trunk/target/linux/generic-2.6/patches-2.6.28/024-mips_disable_fpu.patch @ 17794

Last change on this file since 17794 was 17794, checked in by florian, 7 years ago

[kernel] inform users when the in-kernel mips FPU emulator is disabled (#5774)

File size: 4.0 KB
  • arch/mips/Kconfig

    MIPS: allow disabling the kernel FPU emulator
    
    This patch allows turning off the in-kernel Algorithmics
    FPU emulator support, which allows one to save a couple of
    precious blocks on an embedded system.
    
    Signed-off-by: Florian Fainelli <florian@openwrt.org>
    --
    a b config I8259 
    751751config MIPS_BONITO64 
    752752        bool 
    753753 
     754config MIPS_FPU_EMU 
     755        bool 
     756        default n 
     757        help 
     758           This option allows building a kernel with or without the Algorithmics 
     759           FPU emulator enabled. Turning off this option results in a kernel which 
     760           does not catch floating operations exceptions. Make sure that your toolchain 
     761           is configured to enable software floating point emulation in that case. 
     762                 
     763           If unsure say Y here. 
     764 
    754765config MIPS_MSC 
    755766        bool 
    756767 
  • arch/mips/math-emu/Makefile

    a b  
    22# Makefile for the Linux/MIPS kernel FPU emulation. 
    33# 
    44 
    5 obj-y   := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \ 
     5obj-y   :=      kernel_linkage.o dsemul.o cp1emu.o 
     6 
     7obj-$(CONFIG_MIPS_FPU_EMU)      += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \ 
    68           ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \ 
    79           dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \ 
    810           dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \ 
    911           sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \ 
    1012           sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \ 
    11            dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o 
     13           dp_sqrt.o sp_sqrt.o 
    1214 
    1315EXTRA_CFLAGS += -Werror 
  • arch/mips/math-emu/cp1emu.c

    a b  
    5656#endif 
    5757#define __mips 4 
    5858 
     59/* Further private data for which no space exists in mips_fpu_struct */ 
     60 
     61struct mips_fpu_emulator_stats fpuemustats; 
     62 
     63#ifdef CONFIG_MIPS_FPU_EMU 
     64 
    5965/* Function which emulates a floating point instruction. */ 
    6066 
    6167static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, 
    static int fpux_emu(struct pt_regs *, 
    6672        struct mips_fpu_struct *, mips_instruction); 
    6773#endif 
    6874 
    69 /* Further private data for which no space exists in mips_fpu_struct */ 
    70  
    71 struct mips_fpu_emulator_stats fpuemustats; 
    72  
    7375/* Control registers */ 
    7476 
    7577#define FPCREG_RID      0       /* $0  = revision id */ 
    int fpu_emulator_cop1Handler(struct pt_r 
    12731275 
    12741276        return sig; 
    12751277} 
     1278#else 
     1279int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx, 
     1280        int has_fpu) 
     1281{ 
     1282        return 0; 
     1283} 
     1284#endif /* CONFIG_MIPS_FPU_EMU */ 
    12761285 
    12771286#ifdef CONFIG_DEBUG_FS 
    12781287extern struct dentry *mips_debugfs_dir; 
  • arch/mips/math-emu/dsemul.c

    a b int mips_dsemul(struct pt_regs *regs, mi 
    109109        return SIGILL;          /* force out of emulation loop */ 
    110110} 
    111111 
     112#ifdef CONFIG_MIPS_FPU_EMU 
    112113int do_dsemulret(struct pt_regs *xcp) 
    113114{ 
    114115        struct emuframe __user *fr; 
    int do_dsemulret(struct pt_regs *xcp) 
    165166 
    166167        return 1; 
    167168} 
     169#else 
     170int do_dsemulret(struct pt_regs *xcp) 
     171{ 
     172        return 0; 
     173} 
     174#endif /* CONFIG_MIPS_FPU_EMU */ 
  • arch/mips/math-emu/kernel_linkage.c

    a b  
    2929 
    3030#define SIGNALLING_NAN 0x7ff800007ff80000LL 
    3131 
     32#ifdef CONFIG_MIPS_FPU_EMU 
    3233void fpu_emulator_init_fpu(void) 
    3334{ 
    3435        static int first = 1; 
    int fpu_emulator_restore_context32(struc 
    112113 
    113114        return err; 
    114115} 
    115 #endif 
     116#endif  /* CONFIG_64BIT */ 
     117#else 
     118 
     119void fpu_emulator_init_fpu(void) 
     120{ 
     121        printk(KERN_INFO "FPU emulator disabled, make sure your toolchain" 
     122                "was compiled with software floating point support (soft-float)\n"); 
     123        return; 
     124} 
     125 
     126int fpu_emulator_save_context(struct sigcontext __user *sc) 
     127{ 
     128        return 0; 
     129} 
     130 
     131int fpu_emulator_restore_context(struct sigcontext __user *sc) 
     132{ 
     133        return 0; 
     134} 
     135 
     136int fpu_emulator_save_context32(struct sigcontext32 __user *sc) 
     137{ 
     138        return 0; 
     139} 
     140 
     141int fpu_emulator_restore_context32(struct sigcontext32 __user *sc) 
     142{ 
     143        return 0; 
     144} 
     145 
     146#ifdef CONFIG_64BIT 
     147#endif  /* CONFIG_64BIT */ 
     148#endif /* CONFIG_MIPS_FPU_EMU */ 
Note: See TracBrowser for help on using the repository browser.