diff options
author | Dave Hansen <dave@linux.vnet.ibm.com> | 2008-08-11 13:01:49 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-10-15 04:15:18 -0400 |
commit | 6ad18fba05228fb1d47cdbc0339fe8b3fca1ca26 (patch) | |
tree | 4b64607dad75aa55dd397784d469d03244f0dfe7 /include | |
parent | b772ff362ec6b821c8a5227a3355e263f917bfad (diff) |
KVM: Reduce stack usage in kvm_pv_mmu_op()
We're in a hot path. We can't use kmalloc() because
it might impact performance. So, we just stick the buffer that
we need into the kvm_vcpu_arch structure. This is used very
often, so it is not really a waste.
We also have to move the buffer structure's definition to the
arch-specific x86 kvm header.
Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-x86/kvm_host.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index 99dddfcecf60..9cb4b4dae5c6 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h | |||
@@ -201,6 +201,13 @@ struct kvm_mmu_page { | |||
201 | }; | 201 | }; |
202 | }; | 202 | }; |
203 | 203 | ||
204 | struct kvm_pv_mmu_op_buffer { | ||
205 | void *ptr; | ||
206 | unsigned len; | ||
207 | unsigned processed; | ||
208 | char buf[512] __aligned(sizeof(long)); | ||
209 | }; | ||
210 | |||
204 | /* | 211 | /* |
205 | * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-level | 212 | * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-level |
206 | * 32-bit). The kvm_mmu structure abstracts the details of the current mmu | 213 | * 32-bit). The kvm_mmu structure abstracts the details of the current mmu |
@@ -248,6 +255,9 @@ struct kvm_vcpu_arch { | |||
248 | bool tpr_access_reporting; | 255 | bool tpr_access_reporting; |
249 | 256 | ||
250 | struct kvm_mmu mmu; | 257 | struct kvm_mmu mmu; |
258 | /* only needed in kvm_pv_mmu_op() path, but it's hot so | ||
259 | * put it here to avoid allocation */ | ||
260 | struct kvm_pv_mmu_op_buffer mmu_op_buffer; | ||
251 | 261 | ||
252 | struct kvm_mmu_memory_cache mmu_pte_chain_cache; | 262 | struct kvm_mmu_memory_cache mmu_pte_chain_cache; |
253 | struct kvm_mmu_memory_cache mmu_rmap_desc_cache; | 263 | struct kvm_mmu_memory_cache mmu_rmap_desc_cache; |