linux/arch
Uros Bizjak 199cd1d7b5 KVM: SVM: Split svm_vcpu_run inline assembly to separate file
The compiler (GCC) does not like the situation, where there is inline
assembly block that clobbers all available machine registers in the
middle of the function. This situation can be found in function
svm_vcpu_run in file kvm/svm.c and results in many register spills and
fills to/from stack frame.

This patch fixes the issue with the same approach as was done for
VMX some time ago. The big inline assembly is moved to a separate
assembly .S file, taking into account all ABI requirements.

There are two main benefits of the above approach:

* elimination of several register spills and fills to/from stack
frame, and consequently smaller function .text size. The binary size
of svm_vcpu_run is lowered from 2019 to 1626 bytes.

* more efficient access to a register save array. Currently, register
save array is accessed as:

    7b00:    48 8b 98 28 02 00 00     mov    0x228(%rax),%rbx
    7b07:    48 8b 88 18 02 00 00     mov    0x218(%rax),%rcx
    7b0e:    48 8b 90 20 02 00 00     mov    0x220(%rax),%rdx

and passing ia pointer to a register array as an argument to a function one gets:

  12:    48 8b 48 08              mov    0x8(%rax),%rcx
  16:    48 8b 50 10              mov    0x10(%rax),%rdx
  1a:    48 8b 58 18              mov    0x18(%rax),%rbx

As a result, the total size, considering that the new function size is 229
bytes, gets lowered by 164 bytes.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-04-03 10:53:57 -04:00
..
alpha mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
arc mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
arm ARM: 2020-04-02 15:13:15 -07:00
arm64 ARM: 2020-04-02 15:13:15 -07:00
c6x asm-generic: make more kernel-space headers mandatory 2020-04-02 09:35:25 -07:00
csky asm-generic: make more kernel-space headers mandatory 2020-04-02 09:35:25 -07:00
h8300 asm-generic: make more kernel-space headers mandatory 2020-04-02 09:35:25 -07:00
hexagon mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
ia64 mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
m68k mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
microblaze mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
mips ARM: 2020-04-02 15:13:15 -07:00
nds32 mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
nios2 mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
openrisc mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
parisc mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
powerpc ARM: 2020-04-02 15:13:15 -07:00
riscv mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
s390 ARM: 2020-04-02 15:13:15 -07:00
sh Merge branch 'akpm' (patches from Andrew) 2020-04-02 13:55:34 -07:00
sparc mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
um Merge branch 'akpm' (patches from Andrew) 2020-04-02 13:55:34 -07:00
unicore32 mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
x86 KVM: SVM: Split svm_vcpu_run inline assembly to separate file 2020-04-03 10:53:57 -04:00
xtensa mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 09:35:30 -07:00
.gitignore
Kconfig NOHZ full updates: 2020-03-30 18:29:05 -07:00