diff options
author | Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> | 2011-11-24 04:41:54 -0500 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-12-27 04:17:42 -0500 |
commit | f85e2cb5dbaf905e9470d3fe099b31619da431fc (patch) | |
tree | eb4d486094e0f2c7503a9e28a8ac76ce84d2a09e /include | |
parent | bf3e05bc1e2781d5d8d3ddb2d8bf2d6ec207e5cb (diff) |
KVM: introduce a table to map slot id to index in memslots array
The operation of getting dirty log is frequent when framebuffer-based
displays are used(for example, Xwindow), so, we introduce a mapping table
to speed up id_to_memslot()
Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/kvm_host.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 9efdf5c703a..8c5c30361b0 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -239,6 +239,8 @@ struct kvm_irq_routing_table {}; | |||
239 | struct kvm_memslots { | 239 | struct kvm_memslots { |
240 | u64 generation; | 240 | u64 generation; |
241 | struct kvm_memory_slot memslots[KVM_MEM_SLOTS_NUM]; | 241 | struct kvm_memory_slot memslots[KVM_MEM_SLOTS_NUM]; |
242 | /* The mapping table from slot id to the index in memslots[]. */ | ||
243 | int id_to_index[KVM_MEM_SLOTS_NUM]; | ||
242 | }; | 244 | }; |
243 | 245 | ||
244 | struct kvm { | 246 | struct kvm { |
@@ -341,14 +343,13 @@ static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm) | |||
341 | static inline struct kvm_memory_slot * | 343 | static inline struct kvm_memory_slot * |
342 | id_to_memslot(struct kvm_memslots *slots, int id) | 344 | id_to_memslot(struct kvm_memslots *slots, int id) |
343 | { | 345 | { |
344 | int i; | 346 | int index = slots->id_to_index[id]; |
347 | struct kvm_memory_slot *slot; | ||
345 | 348 | ||
346 | for (i = 0; i < KVM_MEM_SLOTS_NUM; i++) | 349 | slot = &slots->memslots[index]; |
347 | if (slots->memslots[i].id == id) | ||
348 | return &slots->memslots[i]; | ||
349 | 350 | ||
350 | WARN_ON(1); | 351 | WARN_ON(slot->id != id); |
351 | return NULL; | 352 | return slot; |
352 | } | 353 | } |
353 | 354 | ||
354 | #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) | 355 | #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) |