Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f36f3f28 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

KVM: add "new" argument to kvm_arch_commit_memory_region



This lets the function access the new memory slot without going through
kvm_memslots and id_to_memslot.  It will simplify the code when more
than one address space will be supported.

Unfortunately, the "const"ness of the new argument must be casted
away in two places.  Fixing KVM to accept const struct kvm_memory_slot
pointers would require modifications in pretty much all architectures,
and is left for later.

Reviewed-by: default avatarRadim Krcmar <rkrcmar@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 15f46015
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -1721,6 +1721,7 @@ int kvm_mmu_init(void)
void kvm_arch_commit_memory_region(struct kvm *kvm,
void kvm_arch_commit_memory_region(struct kvm *kvm,
				   const struct kvm_userspace_memory_region *mem,
				   const struct kvm_userspace_memory_region *mem,
				   const struct kvm_memory_slot *old,
				   const struct kvm_memory_slot *old,
				   const struct kvm_memory_slot *new,
				   enum kvm_mr_change change)
				   enum kvm_mr_change change)
{
{
	/*
	/*
+1 −0
Original line number Original line Diff line number Diff line
@@ -207,6 +207,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
void kvm_arch_commit_memory_region(struct kvm *kvm,
void kvm_arch_commit_memory_region(struct kvm *kvm,
				   const struct kvm_userspace_memory_region *mem,
				   const struct kvm_userspace_memory_region *mem,
				   const struct kvm_memory_slot *old,
				   const struct kvm_memory_slot *old,
				   const struct kvm_memory_slot *new,
				   enum kvm_mr_change change)
				   enum kvm_mr_change change)
{
{
	unsigned long npages = 0;
	unsigned long npages = 0;
+4 −2
Original line number Original line Diff line number Diff line
@@ -185,7 +185,8 @@ extern int kvmppc_core_prepare_memory_region(struct kvm *kvm,
				const struct kvm_userspace_memory_region *mem);
				const struct kvm_userspace_memory_region *mem);
extern void kvmppc_core_commit_memory_region(struct kvm *kvm,
extern void kvmppc_core_commit_memory_region(struct kvm *kvm,
				const struct kvm_userspace_memory_region *mem,
				const struct kvm_userspace_memory_region *mem,
				const struct kvm_memory_slot *old);
				const struct kvm_memory_slot *old,
				const struct kvm_memory_slot *new);
extern int kvm_vm_ioctl_get_smmu_info(struct kvm *kvm,
extern int kvm_vm_ioctl_get_smmu_info(struct kvm *kvm,
				      struct kvm_ppc_smmu_info *info);
				      struct kvm_ppc_smmu_info *info);
extern void kvmppc_core_flush_memslot(struct kvm *kvm,
extern void kvmppc_core_flush_memslot(struct kvm *kvm,
@@ -246,7 +247,8 @@ struct kvmppc_ops {
				     const struct kvm_userspace_memory_region *mem);
				     const struct kvm_userspace_memory_region *mem);
	void (*commit_memory_region)(struct kvm *kvm,
	void (*commit_memory_region)(struct kvm *kvm,
				     const struct kvm_userspace_memory_region *mem,
				     const struct kvm_userspace_memory_region *mem,
				     const struct kvm_memory_slot *old);
				     const struct kvm_memory_slot *old,
				     const struct kvm_memory_slot *new);
	int (*unmap_hva)(struct kvm *kvm, unsigned long hva);
	int (*unmap_hva)(struct kvm *kvm, unsigned long hva);
	int (*unmap_hva_range)(struct kvm *kvm, unsigned long start,
	int (*unmap_hva_range)(struct kvm *kvm, unsigned long start,
			   unsigned long end);
			   unsigned long end);
+3 −2
Original line number Original line Diff line number Diff line
@@ -764,9 +764,10 @@ int kvmppc_core_prepare_memory_region(struct kvm *kvm,


void kvmppc_core_commit_memory_region(struct kvm *kvm,
void kvmppc_core_commit_memory_region(struct kvm *kvm,
				const struct kvm_userspace_memory_region *mem,
				const struct kvm_userspace_memory_region *mem,
				const struct kvm_memory_slot *old)
				const struct kvm_memory_slot *old,
				const struct kvm_memory_slot *new)
{
{
	kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old);
	kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new);
}
}


int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)
int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)
+2 −1
Original line number Original line Diff line number Diff line
@@ -2383,7 +2383,8 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,


static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm,
static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm,
				const struct kvm_userspace_memory_region *mem,
				const struct kvm_userspace_memory_region *mem,
				const struct kvm_memory_slot *old)
				const struct kvm_memory_slot *old,
				const struct kvm_memory_slot *new)
{
{
	unsigned long npages = mem->memory_size >> PAGE_SHIFT;
	unsigned long npages = mem->memory_size >> PAGE_SHIFT;
	struct kvm_memslots *slots;
	struct kvm_memslots *slots;
Loading