Lines Matching refs:scb_s

25 	struct kvm_s390_sie_block scb_s;	/* 0x0000 */
65 atomic_or(PROG_REQUEST, &vsie_page->scb_s.prog20);
72 if (vsie_page->scb_s.prog0c & PROG_IN_SIE)
73 atomic_or(CPUSTAT_STOP_INT, &vsie_page->scb_s.cpuflags);
74 while (vsie_page->scb_s.prog0c & PROG_IN_SIE)
81 atomic_andnot(PROG_REQUEST, &vsie_page->scb_s.prog20);
87 return !(atomic_read(&vsie_page->scb_s.prog20) & PROG_REQUEST);
97 atomic_andnot(bits, &vsie_page->scb_s.cpuflags);
98 atomic_or(cpuflags & bits, &vsie_page->scb_s.cpuflags);
104 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
110 return set_validity_icpt(scb_s, 0x0001U);
113 return set_validity_icpt(scb_s, 0x0001U);
115 return set_validity_icpt(scb_s, 0x0007U);
123 return set_validity_icpt(scb_s, 0x0001U);
135 atomic_set(&scb_s->cpuflags, newflags);
287 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
301 scb_s->crycbd = 0;
309 return set_validity_icpt(scb_s, 0x0039U);
314 return set_validity_icpt(scb_s, 0x003CU);
322 scb_s->eca |= scb_o->eca & ECA_APIE;
335 return set_validity_icpt(scb_s, 0x0035U);
337 scb_s->ecb3 |= ecb3_flags;
338 scb_s->ecd |= ecd_flags;
349 return set_validity_icpt(scb_s, 0x0022U);
351 return set_validity_icpt(scb_s, 0x0035U);
353 return set_validity_icpt(scb_s, 0x003CU);
355 scb_s->crycbd = ((__u32)(__u64) &vsie_page->crycb) | CRYCB_FORMAT2;
362 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
369 scb_s->ibc = 0;
372 scb_s->ibc = new_ibc;
374 if (scb_s->ibc < min_ibc)
375 scb_s->ibc = min_ibc;
377 if (scb_s->ibc > vcpu->kvm->arch.model.ibc)
378 scb_s->ibc = vcpu->kvm->arch.model.ibc;
385 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
389 scb_o->icptcode = scb_s->icptcode;
390 scb_o->icptstatus = scb_s->icptstatus;
391 scb_o->ipa = scb_s->ipa;
392 scb_o->ipb = scb_s->ipb;
393 scb_o->gbea = scb_s->gbea;
396 scb_o->cputm = scb_s->cputm;
397 scb_o->ckc = scb_s->ckc;
398 scb_o->todpr = scb_s->todpr;
401 scb_o->gpsw = scb_s->gpsw;
402 scb_o->gg14 = scb_s->gg14;
403 scb_o->gg15 = scb_s->gg15;
404 memcpy(scb_o->gcr, scb_s->gcr, 128);
405 scb_o->pp = scb_s->pp;
410 scb_o->fpf |= scb_s->fpf & FPF_BPBC;
414 switch (scb_s->icptcode) {
419 (void *)((u64)scb_s + 0xc0), 0xf0 - 0xc0);
423 if (scb_s->ihcpu != 0xffffU)
424 scb_o->ihcpu = scb_s->ihcpu;
437 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
442 bool had_tx = scb_s->ecb & ECB_TE;
447 scb_s->icptcode = 0;
448 scb_s->eca = 0;
449 scb_s->ecb = 0;
450 scb_s->ecb2 = 0;
451 scb_s->ecb3 = 0;
452 scb_s->ecd = 0;
453 scb_s->fac = 0;
454 scb_s->fpf = 0;
461 scb_s->cputm = scb_o->cputm;
462 scb_s->ckc = scb_o->ckc;
463 scb_s->todpr = scb_o->todpr;
464 scb_s->epoch = scb_o->epoch;
467 scb_s->gpsw = scb_o->gpsw;
468 scb_s->gg14 = scb_o->gg14;
469 scb_s->gg15 = scb_o->gg15;
470 memcpy(scb_s->gcr, scb_o->gcr, 128);
471 scb_s->pp = scb_o->pp;
474 scb_s->gbea = scb_o->gbea;
475 scb_s->lctl = scb_o->lctl;
476 scb_s->svcc = scb_o->svcc;
477 scb_s->ictl = scb_o->ictl;
483 if (!(atomic_read(&scb_s->cpuflags) & CPUSTAT_KSS))
484 scb_s->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
486 scb_s->icpua = scb_o->icpua;
488 if (!(atomic_read(&scb_s->cpuflags) & CPUSTAT_SM))
491 if (scb_s->mso != new_mso || scb_s->prefix != new_prefix)
494 scb_s->msl = scb_o->msl & 0xfffffffffff00000UL;
495 scb_s->mso = new_mso;
496 scb_s->prefix = new_prefix;
499 if (scb_s->ihcpu != 0xffffU)
500 scb_s->ihcpu = scb_o->ihcpu;
503 scb_s->eca |= scb_o->eca & (ECA_MVPGI | ECA_PROTEXCI);
506 scb_s->ecb |= scb_o->ecb & ECB_HOSTPROTINT;
512 scb_s->ecb |= ECB_TE;
516 scb_s->fpf |= scb_o->fpf & FPF_BPBC;
519 scb_s->eca |= scb_o->eca & ECA_VX;
520 scb_s->ecd |= scb_o->ecd & ECD_HOSTREGMGMT;
524 scb_s->ecb3 |= scb_o->ecb3 & ECB3_RI;
527 scb_s->ecb2 |= scb_o->ecb2 & ECB2_IEP;
530 scb_s->ecb |= scb_o->ecb & ECB_GS;
531 scb_s->ecd |= scb_o->ecd & ECD_HOSTREGMGMT;
534 scb_s->eca |= scb_o->eca & ECA_SII;
536 scb_s->eca |= scb_o->eca & ECA_IB;
538 scb_s->eca |= scb_o->eca & ECA_CEI;
541 scb_s->ecd |= scb_o->ecd & ECD_MEF;
542 scb_s->epdx = scb_o->epdx;
547 scb_s->ecd |= scb_o->ecd & ECD_ETOKENF;
549 scb_s->hpid = HPID_VSIE;
550 scb_s->cpnc = scb_o->cpnc;
586 prefix = cur->scb_s.prefix << GUEST_PREFIX_SHIFT;
588 prefix += cur->scb_s.mso;
608 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
609 u64 prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
619 prefix += scb_s->mso;
622 if (!rc && (scb_s->ecb & ECB_TE))
632 rc = set_validity_icpt(scb_s, 0x0037U);
665 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
668 hpa = (u64) scb_s->scaoh << 32 | scb_s->scaol;
672 scb_s->scaol = 0;
673 scb_s->scaoh = 0;
676 hpa = scb_s->itdba;
680 scb_s->itdba = 0;
683 hpa = scb_s->gvrd;
687 scb_s->gvrd = 0;
690 hpa = scb_s->riccbd;
694 scb_s->riccbd = 0;
697 hpa = scb_s->sdnxo;
701 scb_s->sdnxo = 0;
722 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
732 rc = set_validity_icpt(scb_s, 0x0038U);
734 rc = set_validity_icpt(scb_s, 0x0011U);
737 rc = set_validity_icpt(scb_s, 0x003bU);
741 rc = set_validity_icpt(scb_s, 0x0034U);
746 scb_s->scaoh = (u32)((u64)hpa >> 32);
747 scb_s->scaol = (u32)(u64)hpa;
751 if (gpa && (scb_s->ecb & ECB_TE)) {
753 rc = set_validity_icpt(scb_s, 0x0080U);
759 rc = set_validity_icpt(scb_s, 0x0080U);
763 scb_s->itdba = hpa;
767 if (gpa && (scb_s->eca & ECA_VX) && !(scb_s->ecd & ECD_HOSTREGMGMT)) {
769 rc = set_validity_icpt(scb_s, 0x1310U);
778 rc = set_validity_icpt(scb_s, 0x1310U);
782 scb_s->gvrd = hpa;
786 if (gpa && (scb_s->ecb3 & ECB3_RI)) {
788 rc = set_validity_icpt(scb_s, 0x0043U);
794 rc = set_validity_icpt(scb_s, 0x0043U);
799 scb_s->riccbd = hpa;
801 if (((scb_s->ecb & ECB_GS) && !(scb_s->ecd & ECD_HOSTREGMGMT)) ||
802 (scb_s->ecd & ECD_ETOKENF)) {
808 rc = set_validity_icpt(scb_s, 0x10b0U);
812 rc = set_validity_icpt(scb_s, 0x10b1U);
816 rc = set_validity_icpt(scb_s, 0x10b2U);
824 rc = set_validity_icpt(scb_s, 0x10b0U);
828 scb_s->sdnxo = hpa | sdnxc;
943 vsie_page->scb_s.icptcode = 0;
949 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
950 int ilen = insn_length(scb_s->ipa >> 8);
953 if (scb_s->icptstatus & 1) {
954 ilen = (scb_s->icptstatus >> 4) & 0x6;
958 scb_s->gpsw.addr = __rewind_psw(scb_s->gpsw, ilen);
971 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
978 return set_validity_icpt(scb_s, 0x1090U);
979 scb_s->fac = (__u32)(__u64) &vsie_page->fac;
997 return vsie_page->scb_s.gg15;
999 return vsie_page->scb_s.gg14;
1007 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1015 mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
1016 prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
1018 dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
1019 dest = _kvm_s390_real_to_abs(prefix, dest) + scb_s->mso;
1020 src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
1021 src = _kvm_s390_real_to_abs(prefix, src) + scb_s->mso;
1088 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1123 rc = sie64a(scb_s, vcpu->run->s.regs.gprs);
1148 switch (scb_s->icptcode) {
1150 if (scb_s->ipa == 0xb2b0)
1159 if ((scb_s->ipa & 0xf000) != 0xf000)
1160 scb_s->ipa += 0x1000;
1163 if (scb_s->ipa == 0xb254)
1215 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1217 WRITE_ONCE(vcpu->arch.vsie_block, &vsie_page->scb_s);
1228 scb_s->epoch += vcpu->kvm->arch.epoch;
1230 if (scb_s->ecd & ECD_MEF) {
1231 scb_s->epdx += vcpu->kvm->arch.epdx;
1232 if (scb_s->epoch < vcpu->kvm->arch.epoch)
1233 scb_s->epdx += 1;
1258 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1271 atomic_andnot(PROG_BLOCK_SIE, &scb_s->prog20);
1275 if (rc || scb_s->icptcode || signal_pending(current) ||
1293 scb_s->icptcode = ICPT_PROGI;
1294 scb_s->iprcc = PGM_ADDRESSING;
1295 scb_s->pgmilc = 4;
1296 scb_s->gpsw.addr = __rewind_psw(scb_s->gpsw, 4);
1362 memset(&vsie_page->scb_s, 0, sizeof(struct kvm_s390_sie_block));
1365 vsie_page->scb_s.ihcpu = 0xffffU;