|
6 | 6 |
|
7 | 7 | #include <asm/cachectl.h> |
8 | 8 | #include <asm/proc-fns.h> |
9 | | -#include <asm/udftrap.h> |
10 | 9 | #include <asm/fpu.h> |
| 10 | +#include <asm/fp_udfiex_crtl.h> |
11 | 11 |
|
12 | 12 | SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, |
13 | 13 | unsigned long, prot, unsigned long, flags, |
@@ -51,31 +51,33 @@ SYSCALL_DEFINE3(cacheflush, unsigned int, start, unsigned int, end, int, cache) |
51 | 51 | return 0; |
52 | 52 | } |
53 | 53 |
|
54 | | -SYSCALL_DEFINE1(udftrap, int, option) |
| 54 | +SYSCALL_DEFINE2(fp_udfiex_crtl, unsigned int, cmd, unsigned int, act) |
55 | 55 | { |
56 | 56 | #if IS_ENABLED(CONFIG_SUPPORT_DENORMAL_ARITHMETIC) |
57 | | - int old_udftrap; |
| 57 | + int old_udf_iex; |
58 | 58 |
|
59 | 59 | if (!used_math()) { |
60 | 60 | load_fpu(&init_fpuregs); |
61 | | - current->thread.fpu.UDF_trap = init_fpuregs.UDF_trap; |
| 61 | + current->thread.fpu.UDF_IEX_trap = init_fpuregs.UDF_IEX_trap; |
62 | 62 | set_used_math(); |
63 | 63 | } |
64 | 64 |
|
65 | | - old_udftrap = current->thread.fpu.UDF_trap; |
66 | | - switch (option) { |
67 | | - case DISABLE_UDFTRAP: |
68 | | - current->thread.fpu.UDF_trap = 0; |
| 65 | + old_udf_iex = current->thread.fpu.UDF_IEX_trap; |
| 66 | + act &= (FPCSR_mskUDFE | FPCSR_mskIEXE); |
| 67 | + |
| 68 | + switch (cmd) { |
| 69 | + case DISABLE_UDF_IEX_TRAP: |
| 70 | + current->thread.fpu.UDF_IEX_trap &= ~act; |
69 | 71 | break; |
70 | | - case ENABLE_UDFTRAP: |
71 | | - current->thread.fpu.UDF_trap = FPCSR_mskUDFE; |
| 72 | + case ENABLE_UDF_IEX_TRAP: |
| 73 | + current->thread.fpu.UDF_IEX_trap |= act; |
72 | 74 | break; |
73 | | - case GET_UDFTRAP: |
| 75 | + case GET_UDF_IEX_TRAP: |
74 | 76 | break; |
75 | 77 | default: |
76 | 78 | return -EINVAL; |
77 | 79 | } |
78 | | - return old_udftrap; |
| 80 | + return old_udf_iex; |
79 | 81 | #else |
80 | 82 | return -ENOTSUPP; |
81 | 83 | #endif |
|
0 commit comments