Skip to content

Commit 82307e6

Browse files
Sean Christophersonbonzini
authored andcommitted
KVM: PPC: Move memslot memory allocation into prepare_memory_region()
Allocate the rmap array during kvm_arch_prepare_memory_region() to pave the way for removing kvm_arch_create_memslot() altogether. Moving PPC's memory allocation only changes the order of kernel memory allocations between PPC and common KVM code. No functional change intended. Acked-by: Paul Mackerras <paulus@ozlabs.org> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 13f6788 commit 82307e6

File tree

6 files changed

+25
-45
lines changed

6 files changed

+25
-45
lines changed

arch/powerpc/include/asm/kvm_ppc.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,10 @@ extern void kvmppc_core_destroy_vm(struct kvm *kvm);
202202
extern void kvmppc_core_free_memslot(struct kvm *kvm,
203203
struct kvm_memory_slot *free,
204204
struct kvm_memory_slot *dont);
205-
extern int kvmppc_core_create_memslot(struct kvm *kvm,
206-
struct kvm_memory_slot *slot,
207-
unsigned long npages);
208205
extern int kvmppc_core_prepare_memory_region(struct kvm *kvm,
209206
struct kvm_memory_slot *memslot,
210-
const struct kvm_userspace_memory_region *mem);
207+
const struct kvm_userspace_memory_region *mem,
208+
enum kvm_mr_change change);
211209
extern void kvmppc_core_commit_memory_region(struct kvm *kvm,
212210
const struct kvm_userspace_memory_region *mem,
213211
const struct kvm_memory_slot *old,
@@ -280,7 +278,8 @@ struct kvmppc_ops {
280278
void (*flush_memslot)(struct kvm *kvm, struct kvm_memory_slot *memslot);
281279
int (*prepare_memory_region)(struct kvm *kvm,
282280
struct kvm_memory_slot *memslot,
283-
const struct kvm_userspace_memory_region *mem);
281+
const struct kvm_userspace_memory_region *mem,
282+
enum kvm_mr_change change);
284283
void (*commit_memory_region)(struct kvm *kvm,
285284
const struct kvm_userspace_memory_region *mem,
286285
const struct kvm_memory_slot *old,
@@ -294,8 +293,6 @@ struct kvmppc_ops {
294293
void (*mmu_destroy)(struct kvm_vcpu *vcpu);
295294
void (*free_memslot)(struct kvm_memory_slot *free,
296295
struct kvm_memory_slot *dont);
297-
int (*create_memslot)(struct kvm_memory_slot *slot,
298-
unsigned long npages);
299296
int (*init_vm)(struct kvm *kvm);
300297
void (*destroy_vm)(struct kvm *kvm);
301298
int (*get_smmu_info)(struct kvm *kvm, struct kvm_ppc_smmu_info *info);

arch/powerpc/kvm/book3s.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -810,22 +810,18 @@ void kvmppc_core_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
810810
kvm->arch.kvm_ops->free_memslot(free, dont);
811811
}
812812

813-
int kvmppc_core_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
814-
unsigned long npages)
815-
{
816-
return kvm->arch.kvm_ops->create_memslot(slot, npages);
817-
}
818-
819813
void kvmppc_core_flush_memslot(struct kvm *kvm, struct kvm_memory_slot *memslot)
820814
{
821815
kvm->arch.kvm_ops->flush_memslot(kvm, memslot);
822816
}
823817

824818
int kvmppc_core_prepare_memory_region(struct kvm *kvm,
825819
struct kvm_memory_slot *memslot,
826-
const struct kvm_userspace_memory_region *mem)
820+
const struct kvm_userspace_memory_region *mem,
821+
enum kvm_mr_change change)
827822
{
828-
return kvm->arch.kvm_ops->prepare_memory_region(kvm, memslot, mem);
823+
return kvm->arch.kvm_ops->prepare_memory_region(kvm, memslot, mem,
824+
change);
829825
}
830826

831827
void kvmppc_core_commit_memory_region(struct kvm *kvm,

arch/powerpc/kvm/book3s_hv.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4456,20 +4456,20 @@ static void kvmppc_core_free_memslot_hv(struct kvm_memory_slot *free,
44564456
}
44574457
}
44584458

4459-
static int kvmppc_core_create_memslot_hv(struct kvm_memory_slot *slot,
4460-
unsigned long npages)
4459+
static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
4460+
struct kvm_memory_slot *slot,
4461+
const struct kvm_userspace_memory_region *mem,
4462+
enum kvm_mr_change change)
44614463
{
4462-
slot->arch.rmap = vzalloc(array_size(npages, sizeof(*slot->arch.rmap)));
4463-
if (!slot->arch.rmap)
4464-
return -ENOMEM;
4464+
unsigned long npages = mem->memory_size >> PAGE_SHIFT;
44654465

4466-
return 0;
4467-
}
4466+
if (change == KVM_MR_CREATE) {
4467+
slot->arch.rmap = vzalloc(array_size(npages,
4468+
sizeof(*slot->arch.rmap)));
4469+
if (!slot->arch.rmap)
4470+
return -ENOMEM;
4471+
}
44684472

4469-
static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
4470-
struct kvm_memory_slot *memslot,
4471-
const struct kvm_userspace_memory_region *mem)
4472-
{
44734473
return 0;
44744474
}
44754475

@@ -5528,7 +5528,6 @@ static struct kvmppc_ops kvm_ops_hv = {
55285528
.set_spte_hva = kvm_set_spte_hva_hv,
55295529
.mmu_destroy = kvmppc_mmu_destroy_hv,
55305530
.free_memslot = kvmppc_core_free_memslot_hv,
5531-
.create_memslot = kvmppc_core_create_memslot_hv,
55325531
.init_vm = kvmppc_core_init_vm_hv,
55335532
.destroy_vm = kvmppc_core_destroy_vm_hv,
55345533
.get_smmu_info = kvm_vm_ioctl_get_smmu_info_hv,

arch/powerpc/kvm/book3s_pr.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,7 +1927,8 @@ static void kvmppc_core_flush_memslot_pr(struct kvm *kvm,
19271927

19281928
static int kvmppc_core_prepare_memory_region_pr(struct kvm *kvm,
19291929
struct kvm_memory_slot *memslot,
1930-
const struct kvm_userspace_memory_region *mem)
1930+
const struct kvm_userspace_memory_region *mem,
1931+
enum kvm_mr_change change)
19311932
{
19321933
return 0;
19331934
}
@@ -1947,13 +1948,6 @@ static void kvmppc_core_free_memslot_pr(struct kvm_memory_slot *free,
19471948
return;
19481949
}
19491950

1950-
static int kvmppc_core_create_memslot_pr(struct kvm_memory_slot *slot,
1951-
unsigned long npages)
1952-
{
1953-
return 0;
1954-
}
1955-
1956-
19571951
#ifdef CONFIG_PPC64
19581952
static int kvm_vm_ioctl_get_smmu_info_pr(struct kvm *kvm,
19591953
struct kvm_ppc_smmu_info *info)
@@ -2099,7 +2093,6 @@ static struct kvmppc_ops kvm_ops_pr = {
20992093
.set_spte_hva = kvm_set_spte_hva_pr,
21002094
.mmu_destroy = kvmppc_mmu_destroy_pr,
21012095
.free_memslot = kvmppc_core_free_memslot_pr,
2102-
.create_memslot = kvmppc_core_create_memslot_pr,
21032096
.init_vm = kvmppc_core_init_vm_pr,
21042097
.destroy_vm = kvmppc_core_destroy_vm_pr,
21052098
.get_smmu_info = kvm_vm_ioctl_get_smmu_info_pr,

arch/powerpc/kvm/booke.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1776,15 +1776,10 @@ void kvmppc_core_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
17761776
{
17771777
}
17781778

1779-
int kvmppc_core_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
1780-
unsigned long npages)
1781-
{
1782-
return 0;
1783-
}
1784-
17851779
int kvmppc_core_prepare_memory_region(struct kvm *kvm,
17861780
struct kvm_memory_slot *memslot,
1787-
const struct kvm_userspace_memory_region *mem)
1781+
const struct kvm_userspace_memory_region *mem,
1782+
enum kvm_mr_change change)
17881783
{
17891784
return 0;
17901785
}

arch/powerpc/kvm/powerpc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,15 +694,15 @@ void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
694694
int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
695695
unsigned long npages)
696696
{
697-
return kvmppc_core_create_memslot(kvm, slot, npages);
697+
return 0;
698698
}
699699

700700
int kvm_arch_prepare_memory_region(struct kvm *kvm,
701701
struct kvm_memory_slot *memslot,
702702
const struct kvm_userspace_memory_region *mem,
703703
enum kvm_mr_change change)
704704
{
705-
return kvmppc_core_prepare_memory_region(kvm, memslot, mem);
705+
return kvmppc_core_prepare_memory_region(kvm, memslot, mem, change);
706706
}
707707

708708
void kvm_arch_commit_memory_region(struct kvm *kvm,

0 commit comments

Comments
 (0)