diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-02 16:40:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-02 16:40:50 -0400 |
commit | bdfc7cbdeef8cadba0e5793079ac0130b8e2220c (patch) | |
tree | 82af0cae4898e259edcc6cbdad639087dc1189a8 /arch/mips/kernel/process.c | |
parent | 62d1a3ba5adc5653d43f6cd3a90758bb6ad5d5bd (diff) | |
parent | ade63aada79c61bcd5f51cbd310f237399892268 (diff) |
Merge branch 'mips-for-linux-next' of git://git.linux-mips.org/pub/scm/ralf/upstream-sfr
Pull MIPS updates from Ralf Baechle:
- Support for Imgtec's Aptiv family of MIPS cores.
- Improved detection of BCM47xx configurations.
- Fix hiberation for certain configurations.
- Add support for the Chinese Loongson 3 CPU, a MIPS64 R2 core and
systems.
- Detection and support for the MIPS P5600 core.
- A few more random fixes that didn't make 3.14.
- Support for the EVA Extended Virtual Addressing
- Switch Alchemy to the platform PATA driver
- Complete unification of Alchemy support
- Allow availability of I/O cache coherency to be runtime detected
- Improvments to multiprocessing support for Imgtec platforms
- A few microoptimizations
- Cleanups of FPU support
- Paul Gortmaker's fixes for the init stuff
- Support for seccomp
* 'mips-for-linux-next' of git://git.linux-mips.org/pub/scm/ralf/upstream-sfr: (165 commits)
MIPS: CPC: Use __raw_ memory access functions
MIPS: CM: use __raw_ memory access functions
MIPS: Fix warning when including smp-ops.h with CONFIG_SMP=n
MIPS: Malta: GIC IPIs may be used without MT
MIPS: smp-mt: Use common GIC IPI implementation
MIPS: smp-cmp: Remove incorrect core number probe
MIPS: Fix gigaton of warning building with microMIPS.
MIPS: Fix core number detection for MT cores
MIPS: MT: core_nvpes function to retrieve VPE count
MIPS: Provide empty mips_mt_set_cpuoptions when CONFIG_MIPS_MT=n
MIPS: Lasat: Replace del_timer by del_timer_sync
MIPS: Malta: Setup PM I/O region on boot
MIPS: Loongson: Add a Loongson-3 default config file
MIPS: Loongson 3: Add CPU hotplug support
MIPS: Loongson 3: Add Loongson-3 SMP support
MIPS: Loongson: Add Loongson-3 Kconfig options
MIPS: Loongson: Add swiotlb to support All-Memory DMA
MIPS: Loongson 3: Add serial port support
MIPS: Loongson 3: Add IRQ init and dispatch support
MIPS: Loongson 3: Add HT-linked PCI support
...
Diffstat (limited to 'arch/mips/kernel/process.c')
-rw-r--r-- | arch/mips/kernel/process.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 6ae540e133b2..60e39dc7f1eb 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/cpu.h> | 32 | #include <asm/cpu.h> |
33 | #include <asm/dsp.h> | 33 | #include <asm/dsp.h> |
34 | #include <asm/fpu.h> | 34 | #include <asm/fpu.h> |
35 | #include <asm/msa.h> | ||
35 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
36 | #include <asm/mipsregs.h> | 37 | #include <asm/mipsregs.h> |
37 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
@@ -65,6 +66,8 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp) | |||
65 | clear_used_math(); | 66 | clear_used_math(); |
66 | clear_fpu_owner(); | 67 | clear_fpu_owner(); |
67 | init_dsp(); | 68 | init_dsp(); |
69 | clear_thread_flag(TIF_MSA_CTX_LIVE); | ||
70 | disable_msa(); | ||
68 | regs->cp0_epc = pc; | 71 | regs->cp0_epc = pc; |
69 | regs->regs[29] = sp; | 72 | regs->regs[29] = sp; |
70 | } | 73 | } |
@@ -89,7 +92,9 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, | |||
89 | 92 | ||
90 | preempt_disable(); | 93 | preempt_disable(); |
91 | 94 | ||
92 | if (is_fpu_owner()) | 95 | if (is_msa_enabled()) |
96 | save_msa(p); | ||
97 | else if (is_fpu_owner()) | ||
93 | save_fp(p); | 98 | save_fp(p); |
94 | 99 | ||
95 | if (cpu_has_dsp) | 100 | if (cpu_has_dsp) |
@@ -157,7 +162,13 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, | |||
157 | /* Fill in the fpu structure for a core dump.. */ | 162 | /* Fill in the fpu structure for a core dump.. */ |
158 | int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r) | 163 | int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r) |
159 | { | 164 | { |
160 | memcpy(r, ¤t->thread.fpu, sizeof(current->thread.fpu)); | 165 | int i; |
166 | |||
167 | for (i = 0; i < NUM_FPU_REGS; i++) | ||
168 | memcpy(&r[i], ¤t->thread.fpu.fpr[i], sizeof(*r)); | ||
169 | |||
170 | memcpy(&r[NUM_FPU_REGS], ¤t->thread.fpu.fcr31, | ||
171 | sizeof(current->thread.fpu.fcr31)); | ||
161 | 172 | ||
162 | return 1; | 173 | return 1; |
163 | } | 174 | } |
@@ -192,7 +203,13 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) | |||
192 | 203 | ||
193 | int dump_task_fpu(struct task_struct *t, elf_fpregset_t *fpr) | 204 | int dump_task_fpu(struct task_struct *t, elf_fpregset_t *fpr) |
194 | { | 205 | { |
195 | memcpy(fpr, &t->thread.fpu, sizeof(current->thread.fpu)); | 206 | int i; |
207 | |||
208 | for (i = 0; i < NUM_FPU_REGS; i++) | ||
209 | memcpy(&fpr[i], &t->thread.fpu.fpr[i], sizeof(*fpr)); | ||
210 | |||
211 | memcpy(&fpr[NUM_FPU_REGS], &t->thread.fpu.fcr31, | ||
212 | sizeof(t->thread.fpu.fcr31)); | ||
196 | 213 | ||
197 | return 1; | 214 | return 1; |
198 | } | 215 | } |