mirror of
https://github.com/torvalds/linux.git
synced 2026-07-24 22:47:19 +02:00
This patch lets GCC to determine which registers to save when we
switch to/from a VCPU in the case of intel i386.
* Original code saves following registers:
eax, ebx, ecx, edx, edi, esi, ebp (using popa)
* Patched code:
- informs GCC that we modify following registers
using the clobber description:
ebx, edi, rsi
- doesn't save eax because it is an output operand (vmx->fail)
- cannot put ecx in clobber description because it is an input operand,
but as we modify it and we want to keep its value (vcpu), we must
save it (pop/push)
- ebp is saved (pop/push) because GCC seems to ignore its use the clobber
description.
- edx is saved (pop/push) because it is reserved by GCC (REGPARM) and
cannot be put in the clobber description.
- line "mov (%%esp), %3 \n\t" has been removed because %3
is ecx and ecx is restored just after.
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
Signed-off-by: Avi Kivity <avi@qumranet.com>
|
||
|---|---|---|
| .. | ||
| i8259.c | ||
| ioapic.c | ||
| irq.c | ||
| irq.h | ||
| Kconfig | ||
| kvm_main.c | ||
| kvm_svm.h | ||
| kvm.h | ||
| lapic.c | ||
| Makefile | ||
| mmu.c | ||
| paging_tmpl.h | ||
| segment_descriptor.h | ||
| svm.c | ||
| svm.h | ||
| vmx.c | ||
| vmx.h | ||
| x86_emulate.c | ||
| x86_emulate.h | ||
| x86.c | ||
| x86.h | ||