KVM: Portability: Move memslot aliases to new struct kvm_arch
This patches create kvm_arch to hold arch-specific kvm fileds and moves fields naliases and aliases to kvm_arch. Signed-off-by: Zhang Xiantao <xiantao.zhang@intel.com> Acked-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
77b4c255af
commit
d69fb81f05
3 changed files with 19 additions and 14 deletions
|
@ -25,7 +25,6 @@
|
||||||
#include "x86.h"
|
#include "x86.h"
|
||||||
|
|
||||||
#define KVM_MAX_VCPUS 4
|
#define KVM_MAX_VCPUS 4
|
||||||
#define KVM_ALIAS_SLOTS 4
|
|
||||||
#define KVM_MEMORY_SLOTS 8
|
#define KVM_MEMORY_SLOTS 8
|
||||||
/* memory slots that does not exposed to userspace */
|
/* memory slots that does not exposed to userspace */
|
||||||
#define KVM_PRIVATE_MEM_SLOTS 4
|
#define KVM_PRIVATE_MEM_SLOTS 4
|
||||||
|
@ -94,12 +93,6 @@ struct kvm_vcpu {
|
||||||
struct kvm_vcpu_arch arch;
|
struct kvm_vcpu_arch arch;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kvm_mem_alias {
|
|
||||||
gfn_t base_gfn;
|
|
||||||
unsigned long npages;
|
|
||||||
gfn_t target_gfn;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct kvm_memory_slot {
|
struct kvm_memory_slot {
|
||||||
gfn_t base_gfn;
|
gfn_t base_gfn;
|
||||||
unsigned long npages;
|
unsigned long npages;
|
||||||
|
@ -123,8 +116,6 @@ struct kvm_vm_stat {
|
||||||
struct kvm {
|
struct kvm {
|
||||||
struct mutex lock; /* protects everything except vcpus */
|
struct mutex lock; /* protects everything except vcpus */
|
||||||
struct mm_struct *mm; /* userspace tied to this vm */
|
struct mm_struct *mm; /* userspace tied to this vm */
|
||||||
int naliases;
|
|
||||||
struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS];
|
|
||||||
int nmemslots;
|
int nmemslots;
|
||||||
struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
|
struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
|
||||||
KVM_PRIVATE_MEM_SLOTS];
|
KVM_PRIVATE_MEM_SLOTS];
|
||||||
|
@ -147,6 +138,7 @@ struct kvm {
|
||||||
unsigned int tss_addr;
|
unsigned int tss_addr;
|
||||||
struct page *apic_access_page;
|
struct page *apic_access_page;
|
||||||
struct kvm_vm_stat stat;
|
struct kvm_vm_stat stat;
|
||||||
|
struct kvm_arch arch;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The guest did something we don't support. */
|
/* The guest did something we don't support. */
|
||||||
|
|
|
@ -1191,8 +1191,8 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
|
||||||
int i;
|
int i;
|
||||||
struct kvm_mem_alias *alias;
|
struct kvm_mem_alias *alias;
|
||||||
|
|
||||||
for (i = 0; i < kvm->naliases; ++i) {
|
for (i = 0; i < kvm->arch.naliases; ++i) {
|
||||||
alias = &kvm->aliases[i];
|
alias = &kvm->arch.aliases[i];
|
||||||
if (gfn >= alias->base_gfn
|
if (gfn >= alias->base_gfn
|
||||||
&& gfn < alias->base_gfn + alias->npages)
|
&& gfn < alias->base_gfn + alias->npages)
|
||||||
return alias->target_gfn + gfn - alias->base_gfn;
|
return alias->target_gfn + gfn - alias->base_gfn;
|
||||||
|
@ -1228,15 +1228,15 @@ static int kvm_vm_ioctl_set_memory_alias(struct kvm *kvm,
|
||||||
|
|
||||||
mutex_lock(&kvm->lock);
|
mutex_lock(&kvm->lock);
|
||||||
|
|
||||||
p = &kvm->aliases[alias->slot];
|
p = &kvm->arch.aliases[alias->slot];
|
||||||
p->base_gfn = alias->guest_phys_addr >> PAGE_SHIFT;
|
p->base_gfn = alias->guest_phys_addr >> PAGE_SHIFT;
|
||||||
p->npages = alias->memory_size >> PAGE_SHIFT;
|
p->npages = alias->memory_size >> PAGE_SHIFT;
|
||||||
p->target_gfn = alias->target_phys_addr >> PAGE_SHIFT;
|
p->target_gfn = alias->target_phys_addr >> PAGE_SHIFT;
|
||||||
|
|
||||||
for (n = KVM_ALIAS_SLOTS; n > 0; --n)
|
for (n = KVM_ALIAS_SLOTS; n > 0; --n)
|
||||||
if (kvm->aliases[n - 1].npages)
|
if (kvm->arch.aliases[n - 1].npages)
|
||||||
break;
|
break;
|
||||||
kvm->naliases = n;
|
kvm->arch.naliases = n;
|
||||||
|
|
||||||
kvm_mmu_zap_all(kvm);
|
kvm_mmu_zap_all(kvm);
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,8 @@
|
||||||
|
|
||||||
#define IOPL_SHIFT 12
|
#define IOPL_SHIFT 12
|
||||||
|
|
||||||
|
#define KVM_ALIAS_SLOTS 4
|
||||||
|
|
||||||
#define KVM_PERMILLE_MMU_PAGES 20
|
#define KVM_PERMILLE_MMU_PAGES 20
|
||||||
#define KVM_MIN_ALLOC_MMU_PAGES 64
|
#define KVM_MIN_ALLOC_MMU_PAGES 64
|
||||||
#define KVM_NUM_MMU_PAGES 1024
|
#define KVM_NUM_MMU_PAGES 1024
|
||||||
|
@ -255,6 +257,17 @@ struct kvm_vcpu_arch {
|
||||||
struct x86_emulate_ctxt emulate_ctxt;
|
struct x86_emulate_ctxt emulate_ctxt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct kvm_mem_alias {
|
||||||
|
gfn_t base_gfn;
|
||||||
|
unsigned long npages;
|
||||||
|
gfn_t target_gfn;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct kvm_arch{
|
||||||
|
int naliases;
|
||||||
|
struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS];
|
||||||
|
};
|
||||||
|
|
||||||
struct kvm_vcpu_stat {
|
struct kvm_vcpu_stat {
|
||||||
u32 pf_fixed;
|
u32 pf_fixed;
|
||||||
u32 pf_guest;
|
u32 pf_guest;
|
||||||
|
|
Loading…
Add table
Reference in a new issue