Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 updates from Martin Schwidefsky: "The bulk of the s390 patches for 4.13. Some new things but mostly bug fixes and cleanups. Noteworthy changes: - The SCM block driver is converted to blk-mq - Switch s390 to 5 level page tables. The virtual address space for a user space process can now have up to 16EB-4KB. - Introduce a ELF phdr flag for qemu to avoid the global vm.alloc_pgste which forces all processes to large page tables - A couple of PCI improvements to improve error recovery - Included is the merge of the base support for proper machine checks for KVM" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (52 commits) s390/dasd: Fix faulty ENODEV for RO sysfs attribute s390/pci: recognize name clashes with uids s390/pci: provide more debug information s390/pci: fix handling of PEC 306 s390/pci: improve pci hotplug s390/pci: introduce clp_get_state s390/pci: improve error handling during fmb (de)registration s390/pci: improve unreg_ioat error handling s390/pci: improve error handling during interrupt deregistration s390/pci: don't cleanup in arch_setup_msi_irqs KVM: s390: Backup the guest's machine check info s390/nmi: s390: New low level handling for machine check happening in guest s390/fpu: export save_fpu_regs for all configs s390/kvm: avoid global config of vm.alloc_pgste=1 s390: rename struct psw_bits members s390: rename psw_bits enums s390/mm: use correct address space when enabling DAT s390/cio: introduce io_subchannel_type s390/ipl: revert Load Normal semantics for LPAR CCW-type re-IPL s390/dumpstack: remove raw stack dump ...
This commit is contained in:
@@ -551,26 +551,26 @@ static int get_vcpu_asce(struct kvm_vcpu *vcpu, union asce *asce,
|
||||
int rc;
|
||||
struct psw_bits psw = psw_bits(vcpu->arch.sie_block->gpsw);
|
||||
|
||||
if (!psw.t) {
|
||||
if (!psw.dat) {
|
||||
asce->val = 0;
|
||||
asce->r = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mode == GACC_IFETCH)
|
||||
psw.as = psw.as == PSW_AS_HOME ? PSW_AS_HOME : PSW_AS_PRIMARY;
|
||||
if ((mode == GACC_IFETCH) && (psw.as != PSW_BITS_AS_HOME))
|
||||
psw.as = PSW_BITS_AS_PRIMARY;
|
||||
|
||||
switch (psw.as) {
|
||||
case PSW_AS_PRIMARY:
|
||||
case PSW_BITS_AS_PRIMARY:
|
||||
asce->val = vcpu->arch.sie_block->gcr[1];
|
||||
return 0;
|
||||
case PSW_AS_SECONDARY:
|
||||
case PSW_BITS_AS_SECONDARY:
|
||||
asce->val = vcpu->arch.sie_block->gcr[7];
|
||||
return 0;
|
||||
case PSW_AS_HOME:
|
||||
case PSW_BITS_AS_HOME:
|
||||
asce->val = vcpu->arch.sie_block->gcr[13];
|
||||
return 0;
|
||||
case PSW_AS_ACCREG:
|
||||
case PSW_BITS_AS_ACCREG:
|
||||
rc = ar_translation(vcpu, asce, ar, mode);
|
||||
if (rc > 0)
|
||||
return trans_exc(vcpu, rc, ga, ar, mode, PROT_TYPE_ALC);
|
||||
@@ -771,7 +771,7 @@ static int low_address_protection_enabled(struct kvm_vcpu *vcpu,
|
||||
|
||||
if (!ctlreg0.lap)
|
||||
return 0;
|
||||
if (psw_bits(*psw).t && asce.p)
|
||||
if (psw_bits(*psw).dat && asce.p)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
@@ -790,7 +790,7 @@ static int guest_page_range(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
|
||||
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);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
@@ -831,7 +831,7 @@ int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
|
||||
pages = vmalloc(nr_pages * sizeof(unsigned long));
|
||||
if (!pages)
|
||||
return -ENOMEM;
|
||||
need_ipte_lock = psw_bits(*psw).t && !asce.r;
|
||||
need_ipte_lock = psw_bits(*psw).dat && !asce.r;
|
||||
if (need_ipte_lock)
|
||||
ipte_lock(vcpu);
|
||||
rc = guest_page_range(vcpu, ga, ar, pages, nr_pages, asce, mode);
|
||||
@@ -899,7 +899,7 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
|
||||
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);
|
||||
if (rc > 0)
|
||||
return trans_exc(vcpu, rc, gva, 0, mode, PROT_TYPE_DAT);
|
||||
|
Reference in New Issue
Block a user