diff options
-rw-r--r-- | arch/powerpc/Kconfig | 11 | ||||
-rw-r--r-- | arch/powerpc/kernel/traps.c | 22 |
2 files changed, 1 insertions, 32 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index e3009abc7f75..5374776b4c7c 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -319,17 +319,6 @@ config PPC_TRANSACTIONAL_MEM | |||
319 | ---help--- | 319 | ---help--- |
320 | Support user-mode Transactional Memory on POWERPC. | 320 | Support user-mode Transactional Memory on POWERPC. |
321 | 321 | ||
322 | config 8XX_MINIMAL_FPEMU | ||
323 | bool "Minimal math emulation for 8xx" | ||
324 | depends on 8xx && !MATH_EMULATION | ||
325 | help | ||
326 | Older arch/ppc kernels still emulated a few floating point | ||
327 | instructions such as load and store, even when full math | ||
328 | emulation is disabled. Say "Y" here if you want to preserve | ||
329 | this behavior. | ||
330 | |||
331 | It is recommended that you build a soft-float userspace instead. | ||
332 | |||
333 | config IOMMU_HELPER | 322 | config IOMMU_HELPER |
334 | def_bool PPC64 | 323 | def_bool PPC64 |
335 | 324 | ||
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index f4b5687b0c66..071f6e040eb2 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -1396,8 +1396,7 @@ void performance_monitor_exception(struct pt_regs *regs) | |||
1396 | void SoftwareEmulation(struct pt_regs *regs) | 1396 | void SoftwareEmulation(struct pt_regs *regs) |
1397 | { | 1397 | { |
1398 | extern int do_mathemu(struct pt_regs *); | 1398 | extern int do_mathemu(struct pt_regs *); |
1399 | extern int Soft_emulate_8xx(struct pt_regs *); | 1399 | #if defined(CONFIG_MATH_EMULATION) |
1400 | #if defined(CONFIG_MATH_EMULATION) || defined(CONFIG_8XX_MINIMAL_FPEMU) | ||
1401 | int errcode; | 1400 | int errcode; |
1402 | #endif | 1401 | #endif |
1403 | 1402 | ||
@@ -1430,23 +1429,6 @@ void SoftwareEmulation(struct pt_regs *regs) | |||
1430 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | 1429 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); |
1431 | return; | 1430 | return; |
1432 | } | 1431 | } |
1433 | |||
1434 | #elif defined(CONFIG_8XX_MINIMAL_FPEMU) | ||
1435 | errcode = Soft_emulate_8xx(regs); | ||
1436 | if (errcode >= 0) | ||
1437 | PPC_WARN_EMULATED(8xx, regs); | ||
1438 | |||
1439 | switch (errcode) { | ||
1440 | case 0: | ||
1441 | emulate_single_step(regs); | ||
1442 | return; | ||
1443 | case 1: | ||
1444 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | ||
1445 | return; | ||
1446 | case -EFAULT: | ||
1447 | _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip); | ||
1448 | return; | ||
1449 | } | ||
1450 | #else | 1432 | #else |
1451 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | 1433 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); |
1452 | #endif | 1434 | #endif |
@@ -1796,8 +1778,6 @@ struct ppc_emulated ppc_emulated = { | |||
1796 | WARN_EMULATED_SETUP(unaligned), | 1778 | WARN_EMULATED_SETUP(unaligned), |
1797 | #ifdef CONFIG_MATH_EMULATION | 1779 | #ifdef CONFIG_MATH_EMULATION |
1798 | WARN_EMULATED_SETUP(math), | 1780 | WARN_EMULATED_SETUP(math), |
1799 | #elif defined(CONFIG_8XX_MINIMAL_FPEMU) | ||
1800 | WARN_EMULATED_SETUP(8xx), | ||
1801 | #endif | 1781 | #endif |
1802 | #ifdef CONFIG_VSX | 1782 | #ifdef CONFIG_VSX |
1803 | WARN_EMULATED_SETUP(vsx), | 1783 | WARN_EMULATED_SETUP(vsx), |