kernel_optimize_test/arch/mips/kernel
James Hogan 98e91b8457 MIPS: KVM: Add base guest FPU support
Add base code for supporting FPU in MIPS KVM guests. The FPU cannot yet
be enabled in the guest, we're just laying the groundwork.

Whether the guest's FPU context is loaded is stored in a bit in the
fpu_inuse vcpu member. This allows the FPU to be disabled when the guest
disables it, but keeping the FPU context loaded so it doesn't have to be
reloaded if the guest re-enables it.

An fpu_enabled vcpu member stores whether userland has enabled the FPU
capability (which will be wired up in a later patch).

New assembly code is added for saving and restoring the FPU context, and
for saving/clearing and restoring FCSR (which can itself cause an FP
exception depending on the value). The FCSR is restored before returning
to the guest if the FPU is already enabled, and a die notifier is
registered to catch the possible FP exception and step over the ctc1
instruction.

The helper function kvm_lose_fpu() is added to save FPU context and
disable the FPU, which is used when saving hardware state before a
context switch or KVM exit (the vcpu_get_regs() callback).

The helper function kvm_own_fpu() is added to enable the FPU and restore
the FPU context if it isn't already loaded, which will be used in a
later patch when the guest attempts to use the FPU for the first time
and triggers a co-processor unusable exception.

The helper function kvm_drop_fpu() is added to discard the FPU context
and disable the FPU, which will be used in a later patch when the FPU
state will become architecturally UNPREDICTABLE (change of FR mode) to
force a reload of [stale] context in the new FR mode.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Gleb Natapov <gleb@kernel.org>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
2015-03-27 21:25:14 +00:00
..
.gitignore
8250-platform.c
asm-offsets.c MIPS: KVM: Add base guest FPU support 2015-03-27 21:25:14 +00:00
binfmt_elfn32.c MIPS: Compat: Fix cputime_to_timeval() arguments in compat binfmt_elf. 2013-06-06 16:11:26 +02:00
binfmt_elfo32.c MIPS: Remove old core dump functions 2014-08-02 00:06:37 +02:00
bmips_vec.S MIPS: BMIPS: Fix ".previous without corresponding .section" warnings 2014-11-24 07:44:05 +01:00
branch.c MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
cevt-bcm1480.c MIPS: Delete __cpuinit/__CPUINIT usage from MIPS code 2013-07-14 19:36:51 -04:00
cevt-ds1287.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cevt-gt641xx.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cevt-r4k.c MIPS: kernel: cevt-r4k: Add MIPS R6 to the c0_compare_interrupt handler 2015-02-17 15:37:25 +00:00
cevt-sb1250.c MIPS: Delete __cpuinit/__CPUINIT usage from MIPS code 2013-07-14 19:36:51 -04:00
cevt-txx9.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cps-vec.S MIPS: kernel: cps-vec: Replace "addi" with "addiu" 2015-02-17 15:37:28 +00:00
cpu-bugs64.c MIPS: kernel: cpu-bugs64: Do not check R6 cores for existing 64-bit bugs 2015-02-17 15:37:24 +00:00
cpu-probe.c MIPS: Add set/clear CP0 macros for PageGrain register 2015-02-20 12:55:18 +01:00
crash_dump.c mips: Convert pr_warning to pr_warn 2014-11-24 07:44:51 +01:00
crash.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
csrc-bcm1480.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
csrc-ioasic.c MIPS: DECstation HRT initialization rearrangement 2013-09-13 11:56:13 +02:00
csrc-r4k.c
csrc-sb1250.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
early_printk_8250.c MIPS: Add 8250/16550 serial early printk driver 2013-10-29 21:24:36 +01:00
early_printk.c early_printk: consolidate random copies of identical code 2013-04-29 18:28:13 -07:00
elf.c MIPS: kernel: elf: Improve the overall ABI and FPU mode checks 2015-02-17 15:37:39 +00:00
entry.S MIPS: Make use of the ERETNC instruction on MIPS R6 2015-02-17 15:37:37 +00:00
ftrace.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-08-07 08:47:00 -07:00
genex.S MIPS: Clear [MSA]FPE CSR.Cause after notify_die() 2015-03-27 21:25:06 +00:00
gpio_txx9.c
head.S MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
i8253.c
i8259.c MIPS: i8259: Use IRQ domains 2014-11-24 07:44:52 +01:00
idle.c MIPS: Add cases for CPU_QEMU_GENERIC 2015-02-16 10:01:24 +00:00
irq_cpu.c MIPS: IRQ: Fix disable_irq on CPU IRQs 2015-01-16 14:03:17 +01:00
irq_txx9.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
irq-gt641xx.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
irq-msc01.c MIPS: MSC: Prevent out-of-bounds writes to MIPS SC ioremap'd region 2014-06-26 10:48:23 +01:00
irq-rm7000.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
irq.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-06-09 18:10:34 -07:00
jump_label.c MIPS: jump_label.c: Handle the microMIPS J instruction encoding 2014-11-19 18:22:09 +01:00
kgdb.c MIPS: kernel: {ftrace,kgdb}: Set correct address limit for cache flushes 2014-03-26 23:09:18 +01:00
kprobes.c mips: Replace __get_cpu_var uses 2014-08-26 13:45:51 -04:00
linux32.c unify compat fanotify_mark(2), switch to COMPAT_SYSCALL_DEFINE 2013-05-09 13:46:38 -04:00
machine_kexec.c MIPS: kdump: Set correct value to kexec_indirection_page variable 2014-08-25 16:33:44 +02:00
Makefile MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
mcount.S MIPS: mcount: Adjust stack pointer for static trace in MIPS32 2014-09-26 11:41:17 +02:00
mips_ksyms.c Merge branch 'mipsr6-for-3.20' of git://git.linux-mips.org/pub/scm/mchandras/linux into mips-for-linux-next 2015-02-19 16:00:34 +01:00
mips_machine.c MIPS: move mips_{set,get}_machine_name() to a more generic place 2013-05-08 01:19:07 +02:00
mips-cm.c MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mips-cpc.c MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mips-mt-fpaff.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mips-mt.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mips-r2-to-r6-emul.c MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
module-rela.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
module.c mm: vmalloc: pass additional vm_flags to __vmalloc_node_range() 2015-02-13 21:21:42 -08:00
octeon_switch.S MIPS: OCTEON: Delete unused COP2 saving code 2015-02-20 15:30:23 +01:00
perf_event_mipsxx.c MIPS: Add hook to get C0 performance counter interrupt 2014-11-24 07:44:53 +01:00
perf_event.c
pm-cps.c MIPS: {pm,smp}-cps: use cpu_vpe_id macro 2014-07-30 20:48:42 +02:00
pm.c MIPS: PM: Implement PM helper macros 2014-05-02 16:39:10 +01:00
proc.c MIPS: kernel: proc: Add MIPS R6 support to /proc/cpuinfo 2015-02-17 15:37:26 +00:00
process.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-02-21 19:41:38 -08:00
prom.c MIPS: Create a helper function for DT setup 2014-11-24 07:45:12 +01:00
ptrace.c MIPS: prevent FP context set via ptrace being discarded 2015-03-27 19:42:47 +01:00
ptrace32.c MIPS: Remove asm/user.h 2014-08-02 00:06:37 +02:00
r4k_fpu.S MIPS: Push .set mips64r* into the functions needing it 2015-03-27 19:42:42 +01:00
r4k_switch.S MIPS: kernel: r4k_switch: Add support for MIPS R6 2015-02-17 15:37:27 +00:00
r2300_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
r2300_switch.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
r6000_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
relocate_kernel.S MIPS: kdump: Skip walking indirection page for crashkernels 2013-09-05 20:53:37 +02:00
reset.c
rtlx-cmp.c MIPS: APRP: Fix an issue when device_create() fails. 2014-08-01 17:30:35 +02:00
rtlx-mt.c MIPS: APRP: Fix an issue when device_create() fails. 2014-08-01 17:30:35 +02:00
rtlx.c MIPS: rtlx: Remove KERN_DEBUG from pr_debug() arguments in rtlx.c 2014-11-24 07:44:04 +01:00
scall32-o32.S MIPS: Fix restart of indirect syscalls 2015-01-16 00:35:45 +01:00
scall64-64.S MIPS: Wire up execveat(2). 2015-01-13 15:53:09 +01:00
scall64-n32.S MIPS: Wire up execveat(2). 2015-01-13 15:53:09 +01:00
scall64-o32.S MIPS: Fix restart of indirect syscalls 2015-01-16 00:35:45 +01:00
segment.c MIPS: Add debugfs file to print the segmentation control registers 2014-01-22 20:19:00 +01:00
setup.c MIPS: Use phys_addr_t instead of phys_t 2014-12-12 15:36:13 -08:00
signal_n32.c mips: Use sigsp() 2014-08-06 13:04:30 +02:00
signal-common.h mips: Use get_signal() signal_setup_done() 2014-08-06 13:03:08 +02:00
signal.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
signal32.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
smp-bmips.c MIPS: BMIPS: Let each platform customize the CPU1 IRQ mask 2014-11-24 07:45:11 +01:00
smp-cmp.c MIPS: smp-mt,smp-cmp: Enable all HW IRQs on secondary CPUs 2015-01-16 13:02:40 +01:00
smp-cps.c MIPS: Move gic.h to include/linux/irqchip/mips-gic.h 2014-11-24 07:44:59 +01:00
smp-gic.c MIPS: Move gic.h to include/linux/irqchip/mips-gic.h 2014-11-24 07:44:59 +01:00
smp-mt.c MIPS: smp-mt,smp-cmp: Enable all HW IRQs on secondary CPUs 2015-01-16 13:02:40 +01:00
smp-up.c MIPS: SMP: Remove plat_smp_ops cpus_done method. 2014-05-27 11:06:42 +02:00
smp.c MIPS: Fix kernel lockup or crash after CPU offline/online 2015-01-29 23:54:07 +01:00
spinlock_test.c
spram.c MIPS: Add cases for CPU_QEMU_GENERIC 2015-02-16 10:01:24 +00:00
stacktrace.c
sync-r4k.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
syscall.c MIPS: kernel: syscall: Set the appropriate ISA level for MIPS R6 2015-02-17 15:37:29 +00:00
time.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
topology.c
traps.c MIPS: Clear [MSA]FPE CSR.Cause after notify_die() 2015-03-27 21:25:06 +00:00
unaligned.c MIPS: kernel: unaligned: Add support for the MIPS R6 2015-02-17 15:37:28 +00:00
vdso.c MIPS: Enable VDSO randomization 2014-11-24 07:45:38 +01:00
vmlinux.lds.S MIPS: Discard .eh_frame sections in linker script. 2013-08-26 15:33:41 +02:00
vpe-cmp.c MIPS: APRP: Add VPE loader support for CMP platforms. 2014-01-22 20:19:02 +01:00
vpe-mt.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
vpe.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-01-30 17:20:32 -08:00
watch.c MIPS: Delete __cpuinit/__CPUINIT usage from MIPS code 2013-07-14 19:36:51 -04:00