return trans_exc(vcpu, PGM_PROTECTION, ga, ar, mode,
                                         PROT_TYPE_LA);
                ga &= PAGE_MASK;
 -              if (psw_bits(*psw).t) {
 +              if (psw_bits(*psw).dat) {
-                       rc = guest_translate(vcpu, ga, pages, asce, mode);
+                       rc = guest_translate(vcpu, ga, pages, asce, mode, &prot);
                        if (rc < 0)
                                return rc;
                } else {
                                         mode, PROT_TYPE_LA);
        }
  
 -      if (psw_bits(*psw).t && !asce.r) {      /* Use DAT? */
 +      if (psw_bits(*psw).dat && !asce.r) {    /* Use DAT? */
-               rc = guest_translate(vcpu, gva, gpa, asce, mode);
+               rc = guest_translate(vcpu, gva, gpa, asce, mode, &prot);
                if (rc > 0)
-                       return trans_exc(vcpu, rc, gva, 0, mode, PROT_TYPE_DAT);
+                       return trans_exc(vcpu, rc, gva, 0, mode, prot);
        } else {
                *gpa = kvm_s390_real_to_abs(vcpu, gva);
                if (kvm_is_error_gpa(vcpu->kvm, *gpa))