Skip to content

Commit

Permalink
KVM: Portability: Move memslot aliases to new struct kvm_arch
Browse files Browse the repository at this point in the history
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 <[email protected]>
Acked-by: Carsten Otte <[email protected]>
Signed-off-by: Avi Kivity <[email protected]>
  • Loading branch information
Zhang Xiantao authored and avikivity committed Jan 30, 2008
1 parent 77b4c25 commit d69fb81
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 14 deletions.
10 changes: 1 addition & 9 deletions drivers/kvm/kvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "x86.h"

#define KVM_MAX_VCPUS 4
#define KVM_ALIAS_SLOTS 4
#define KVM_MEMORY_SLOTS 8
/* memory slots that does not exposed to userspace */
#define KVM_PRIVATE_MEM_SLOTS 4
Expand Down Expand Up @@ -94,12 +93,6 @@ struct kvm_vcpu {
struct kvm_vcpu_arch arch;
};

struct kvm_mem_alias {
gfn_t base_gfn;
unsigned long npages;
gfn_t target_gfn;
};

struct kvm_memory_slot {
gfn_t base_gfn;
unsigned long npages;
Expand All @@ -123,8 +116,6 @@ struct kvm_vm_stat {
struct kvm {
struct mutex lock; /* protects everything except vcpus */
struct mm_struct *mm; /* userspace tied to this vm */
int naliases;
struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS];
int nmemslots;
struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
KVM_PRIVATE_MEM_SLOTS];
Expand All @@ -147,6 +138,7 @@ struct kvm {
unsigned int tss_addr;
struct page *apic_access_page;
struct kvm_vm_stat stat;
struct kvm_arch arch;
};

/* The guest did something we don't support. */
Expand Down
10 changes: 5 additions & 5 deletions drivers/kvm/x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -1191,8 +1191,8 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
int i;
struct kvm_mem_alias *alias;

for (i = 0; i < kvm->naliases; ++i) {
alias = &kvm->aliases[i];
for (i = 0; i < kvm->arch.naliases; ++i) {
alias = &kvm->arch.aliases[i];
if (gfn >= alias->base_gfn
&& gfn < alias->base_gfn + alias->npages)
return alias->target_gfn + gfn - alias->base_gfn;
Expand Down Expand Up @@ -1228,15 +1228,15 @@ static int kvm_vm_ioctl_set_memory_alias(struct kvm *kvm,

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->npages = alias->memory_size >> PAGE_SHIFT;
p->target_gfn = alias->target_phys_addr >> PAGE_SHIFT;

for (n = KVM_ALIAS_SLOTS; n > 0; --n)
if (kvm->aliases[n - 1].npages)
if (kvm->arch.aliases[n - 1].npages)
break;
kvm->naliases = n;
kvm->arch.naliases = n;

kvm_mmu_zap_all(kvm);

Expand Down
13 changes: 13 additions & 0 deletions drivers/kvm/x86.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@

#define IOPL_SHIFT 12

#define KVM_ALIAS_SLOTS 4

#define KVM_PERMILLE_MMU_PAGES 20
#define KVM_MIN_ALLOC_MMU_PAGES 64
#define KVM_NUM_MMU_PAGES 1024
Expand Down Expand Up @@ -255,6 +257,17 @@ struct kvm_vcpu_arch {
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 {
u32 pf_fixed;
u32 pf_guest;
Expand Down

0 comments on commit d69fb81

Please sign in to comment.