aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/kvm/kvm-ia64.c2
-rw-r--r--arch/s390/kvm/kvm-s390.h2
-rw-r--r--arch/x86/kvm/mmu.c7
-rw-r--r--arch/x86/kvm/vmx.c2
-rw-r--r--arch/x86/kvm/x86.c4
-rw-r--r--arch/x86/kvm/x86.h7
6 files changed, 16 insertions, 8 deletions
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index d7bac1f75af0..d5f4e9161201 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -1381,7 +1381,7 @@ static void kvm_release_vm_pages(struct kvm *kvm)
1381 int i, j; 1381 int i, j;
1382 unsigned long base_gfn; 1382 unsigned long base_gfn;
1383 1383
1384 slots = rcu_dereference(kvm->memslots); 1384 slots = kvm_memslots(kvm);
1385 for (i = 0; i < slots->nmemslots; i++) { 1385 for (i = 0; i < slots->nmemslots; i++) {
1386 memslot = &slots->memslots[i]; 1386 memslot = &slots->memslots[i];
1387 base_gfn = memslot->base_gfn; 1387 base_gfn = memslot->base_gfn;
diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
index 60f09ab3672c..cfa9d1777457 100644
--- a/arch/s390/kvm/kvm-s390.h
+++ b/arch/s390/kvm/kvm-s390.h
@@ -72,7 +72,7 @@ static inline void kvm_s390_vcpu_set_mem(struct kvm_vcpu *vcpu)
72 struct kvm_memslots *memslots; 72 struct kvm_memslots *memslots;
73 73
74 idx = srcu_read_lock(&vcpu->kvm->srcu); 74 idx = srcu_read_lock(&vcpu->kvm->srcu);
75 memslots = rcu_dereference(vcpu->kvm->memslots); 75 memslots = kvm_memslots(vcpu->kvm);
76 76
77 mem = &memslots->memslots[0]; 77 mem = &memslots->memslots[0];
78 78
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 7a17db1cdcd6..0682a393ad90 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -787,7 +787,7 @@ static int kvm_handle_hva(struct kvm *kvm, unsigned long hva,
787 int retval = 0; 787 int retval = 0;
788 struct kvm_memslots *slots; 788 struct kvm_memslots *slots;
789 789
790 slots = rcu_dereference(kvm->memslots); 790 slots = kvm_memslots(kvm);
791 791
792 for (i = 0; i < slots->nmemslots; i++) { 792 for (i = 0; i < slots->nmemslots; i++) {
793 struct kvm_memory_slot *memslot = &slots->memslots[i]; 793 struct kvm_memory_slot *memslot = &slots->memslots[i];
@@ -3016,7 +3016,8 @@ unsigned int kvm_mmu_calculate_mmu_pages(struct kvm *kvm)
3016 unsigned int nr_pages = 0; 3016 unsigned int nr_pages = 0;
3017 struct kvm_memslots *slots; 3017 struct kvm_memslots *slots;
3018 3018
3019 slots = rcu_dereference(kvm->memslots); 3019 slots = kvm_memslots(kvm);
3020
3020 for (i = 0; i < slots->nmemslots; i++) 3021 for (i = 0; i < slots->nmemslots; i++)
3021 nr_pages += slots->memslots[i].npages; 3022 nr_pages += slots->memslots[i].npages;
3022 3023
@@ -3292,7 +3293,7 @@ static int count_rmaps(struct kvm_vcpu *vcpu)
3292 int i, j, k, idx; 3293 int i, j, k, idx;
3293 3294
3294 idx = srcu_read_lock(&kvm->srcu); 3295 idx = srcu_read_lock(&kvm->srcu);
3295 slots = rcu_dereference(kvm->memslots); 3296 slots = kvm_memslots(kvm);
3296 for (i = 0; i < KVM_MEMORY_SLOTS; ++i) { 3297 for (i = 0; i < KVM_MEMORY_SLOTS; ++i) {
3297 struct kvm_memory_slot *m = &slots->memslots[i]; 3298 struct kvm_memory_slot *m = &slots->memslots[i];
3298 struct kvm_rmap_desc *d; 3299 struct kvm_rmap_desc *d;
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 0b896ac7e4bb..d0a10b5612e9 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1558,7 +1558,7 @@ static gva_t rmode_tss_base(struct kvm *kvm)
1558 struct kvm_memslots *slots; 1558 struct kvm_memslots *slots;
1559 gfn_t base_gfn; 1559 gfn_t base_gfn;
1560 1560
1561 slots = rcu_dereference(kvm->memslots); 1561 slots = kvm_memslots(kvm);
1562 base_gfn = kvm->memslots->memslots[0].base_gfn + 1562 base_gfn = kvm->memslots->memslots[0].base_gfn +
1563 kvm->memslots->memslots[0].npages - 3; 1563 kvm->memslots->memslots[0].npages - 3;
1564 return base_gfn << PAGE_SHIFT; 1564 return base_gfn << PAGE_SHIFT;
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 58a96e6a234c..638248c96999 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2497,7 +2497,7 @@ gfn_t unalias_gfn_instantiation(struct kvm *kvm, gfn_t gfn)
2497 struct kvm_mem_alias *alias; 2497 struct kvm_mem_alias *alias;
2498 struct kvm_mem_aliases *aliases; 2498 struct kvm_mem_aliases *aliases;
2499 2499
2500 aliases = rcu_dereference(kvm->arch.aliases); 2500 aliases = kvm_aliases(kvm);
2501 2501
2502 for (i = 0; i < aliases->naliases; ++i) { 2502 for (i = 0; i < aliases->naliases; ++i) {
2503 alias = &aliases->aliases[i]; 2503 alias = &aliases->aliases[i];
@@ -2516,7 +2516,7 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
2516 struct kvm_mem_alias *alias; 2516 struct kvm_mem_alias *alias;
2517 struct kvm_mem_aliases *aliases; 2517 struct kvm_mem_aliases *aliases;
2518 2518
2519 aliases = rcu_dereference(kvm->arch.aliases); 2519 aliases = kvm_aliases(kvm);
2520 2520
2521 for (i = 0; i < aliases->naliases; ++i) { 2521 for (i = 0; i < aliases->naliases; ++i) {
2522 alias = &aliases->aliases[i]; 2522 alias = &aliases->aliases[i];
diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h
index b7a404722d2b..f4b54458285b 100644
--- a/arch/x86/kvm/x86.h
+++ b/arch/x86/kvm/x86.h
@@ -65,6 +65,13 @@ static inline int is_paging(struct kvm_vcpu *vcpu)
65 return kvm_read_cr0_bits(vcpu, X86_CR0_PG); 65 return kvm_read_cr0_bits(vcpu, X86_CR0_PG);
66} 66}
67 67
68static inline struct kvm_mem_aliases *kvm_aliases(struct kvm *kvm)
69{
70 return rcu_dereference_check(kvm->arch.aliases,
71 srcu_read_lock_held(&kvm->srcu)
72 || lockdep_is_held(&kvm->slots_lock));
73}
74
68void kvm_before_handle_nmi(struct kvm_vcpu *vcpu); 75void kvm_before_handle_nmi(struct kvm_vcpu *vcpu);
69void kvm_after_handle_nmi(struct kvm_vcpu *vcpu); 76void kvm_after_handle_nmi(struct kvm_vcpu *vcpu);
70 77