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

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

Merge tag 'kvm-s390-master-4.19-2' of...

Merge tag 'kvm-s390-master-4.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD

KVM: s390: Fixes for 4.19

- more fallout from the hugetlbfs enablement
- bugfix for vma handling
parents 7876320f 40ebdb8e
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -4510,7 +4510,8 @@ Do not enable KVM_FEATURE_PV_UNHALT if you disable HLT exits.
Architectures: s390
Architectures: s390
Parameters: none
Parameters: none
Returns: 0 on success, -EINVAL if hpage module parameter was not set
Returns: 0 on success, -EINVAL if hpage module parameter was not set
	 or cmma is enabled
	 or cmma is enabled, or the VM has the KVM_VM_S390_UCONTROL
	 flag set


With this capability the KVM support for memory backing with 1m pages
With this capability the KVM support for memory backing with 1m pages
through hugetlbfs can be enabled for a VM. After the capability is
through hugetlbfs can be enabled for a VM. After the capability is
+2 −2
Original line number Original line Diff line number Diff line
@@ -481,7 +481,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
		break;
		break;
	case KVM_CAP_S390_HPAGE_1M:
	case KVM_CAP_S390_HPAGE_1M:
		r = 0;
		r = 0;
		if (hpage)
		if (hpage && !kvm_is_ucontrol(kvm))
			r = 1;
			r = 1;
		break;
		break;
	case KVM_CAP_S390_MEM_OP:
	case KVM_CAP_S390_MEM_OP:
@@ -691,7 +691,7 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
		mutex_lock(&kvm->lock);
		mutex_lock(&kvm->lock);
		if (kvm->created_vcpus)
		if (kvm->created_vcpus)
			r = -EBUSY;
			r = -EBUSY;
		else if (!hpage || kvm->arch.use_cmma)
		else if (!hpage || kvm->arch.use_cmma || kvm_is_ucontrol(kvm))
			r = -EINVAL;
			r = -EINVAL;
		else {
		else {
			r = 0;
			r = 0;
+3 −1
Original line number Original line Diff line number Diff line
@@ -708,11 +708,13 @@ void gmap_discard(struct gmap *gmap, unsigned long from, unsigned long to)
		vmaddr |= gaddr & ~PMD_MASK;
		vmaddr |= gaddr & ~PMD_MASK;
		/* Find vma in the parent mm */
		/* Find vma in the parent mm */
		vma = find_vma(gmap->mm, vmaddr);
		vma = find_vma(gmap->mm, vmaddr);
		if (!vma)
			continue;
		/*
		/*
		 * We do not discard pages that are backed by
		 * We do not discard pages that are backed by
		 * hugetlbfs, so we don't have to refault them.
		 * hugetlbfs, so we don't have to refault them.
		 */
		 */
		if (vma && is_vm_hugetlb_page(vma))
		if (is_vm_hugetlb_page(vma))
			continue;
			continue;
		size = min(to - gaddr, PMD_SIZE - (gaddr & ~PMD_MASK));
		size = min(to - gaddr, PMD_SIZE - (gaddr & ~PMD_MASK));
		zap_page_range(vma, vmaddr, size);
		zap_page_range(vma, vmaddr, size);