Commit 34fcf05b authored by Radim Krčmář's avatar Radim Krčmář

Merge tag 'kvm-s390-master-4.11-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux

From: Christian Borntraeger <borntraeger@de.ibm.com>

KVM: s390: Fix instruction-execution-protection/change-recording override

This is a fix that prevents translation exception errors
on valid page tables for the instruction-exection-protection
support. This feature was added during the 4.11 merge window.
We have to remove an old check that would trigger if the
change-recording override is not available (e.g. edat1 disabled
via cpu model).
parents a71c9a1c 232b8e3b
...@@ -168,8 +168,7 @@ union page_table_entry { ...@@ -168,8 +168,7 @@ union page_table_entry {
unsigned long z : 1; /* Zero Bit */ unsigned long z : 1; /* Zero Bit */
unsigned long i : 1; /* Page-Invalid Bit */ unsigned long i : 1; /* Page-Invalid Bit */
unsigned long p : 1; /* DAT-Protection Bit */ unsigned long p : 1; /* DAT-Protection Bit */
unsigned long co : 1; /* Change-Recording Override */ unsigned long : 9;
unsigned long : 8;
}; };
}; };
...@@ -745,8 +744,6 @@ static unsigned long guest_translate(struct kvm_vcpu *vcpu, unsigned long gva, ...@@ -745,8 +744,6 @@ static unsigned long guest_translate(struct kvm_vcpu *vcpu, unsigned long gva,
return PGM_PAGE_TRANSLATION; return PGM_PAGE_TRANSLATION;
if (pte.z) if (pte.z)
return PGM_TRANSLATION_SPEC; return PGM_TRANSLATION_SPEC;
if (pte.co && !edat1)
return PGM_TRANSLATION_SPEC;
dat_protection |= pte.p; dat_protection |= pte.p;
raddr.pfra = pte.pfra; raddr.pfra = pte.pfra;
real_address: real_address:
...@@ -1182,7 +1179,7 @@ int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *sg, ...@@ -1182,7 +1179,7 @@ int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *sg,
rc = gmap_read_table(sg->parent, pgt + vaddr.px * 8, &pte.val); rc = gmap_read_table(sg->parent, pgt + vaddr.px * 8, &pte.val);
if (!rc && pte.i) if (!rc && pte.i)
rc = PGM_PAGE_TRANSLATION; rc = PGM_PAGE_TRANSLATION;
if (!rc && (pte.z || (pte.co && sg->edat_level < 1))) if (!rc && pte.z)
rc = PGM_TRANSLATION_SPEC; rc = PGM_TRANSLATION_SPEC;
shadow_page: shadow_page:
pte.p |= dat_protection; pte.p |= dat_protection;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment