Lines Matching refs:scb_s
26 struct kvm_s390_sie_block scb_s; /* 0x0000 */
66 atomic_or(PROG_REQUEST, &vsie_page->scb_s.prog20);
73 if (vsie_page->scb_s.prog0c & PROG_IN_SIE)
74 atomic_or(CPUSTAT_STOP_INT, &vsie_page->scb_s.cpuflags);
75 while (vsie_page->scb_s.prog0c & PROG_IN_SIE)
82 atomic_andnot(PROG_REQUEST, &vsie_page->scb_s.prog20);
88 return !(atomic_read(&vsie_page->scb_s.prog20) & PROG_REQUEST);
98 atomic_andnot(bits, &vsie_page->scb_s.cpuflags);
99 atomic_or(cpuflags & bits, &vsie_page->scb_s.cpuflags);
105 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
111 return set_validity_icpt(scb_s, 0x0001U);
114 return set_validity_icpt(scb_s, 0x0001U);
116 return set_validity_icpt(scb_s, 0x0007U);
124 return set_validity_icpt(scb_s, 0x0001U);
136 atomic_set(&scb_s->cpuflags, newflags);
296 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
310 scb_s->crycbd = 0;
318 return set_validity_icpt(scb_s, 0x0039U);
323 return set_validity_icpt(scb_s, 0x003CU);
331 scb_s->eca |= scb_o->eca & ECA_APIE;
344 return set_validity_icpt(scb_s, 0x0035U);
346 scb_s->ecb3 |= ecb3_flags;
347 scb_s->ecd |= ecd_flags;
358 return set_validity_icpt(scb_s, 0x0022U);
360 return set_validity_icpt(scb_s, 0x0035U);
362 return set_validity_icpt(scb_s, 0x003CU);
364 scb_s->crycbd = ((__u32)(__u64) &vsie_page->crycb) | CRYCB_FORMAT2;
371 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
378 scb_s->ibc = 0;
381 scb_s->ibc = new_ibc;
383 if (scb_s->ibc < min_ibc)
384 scb_s->ibc = min_ibc;
386 if (scb_s->ibc > vcpu->kvm->arch.model.ibc)
387 scb_s->ibc = vcpu->kvm->arch.model.ibc;
394 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
398 scb_o->icptcode = scb_s->icptcode;
399 scb_o->icptstatus = scb_s->icptstatus;
400 scb_o->ipa = scb_s->ipa;
401 scb_o->ipb = scb_s->ipb;
402 scb_o->gbea = scb_s->gbea;
405 scb_o->cputm = scb_s->cputm;
406 scb_o->ckc = scb_s->ckc;
407 scb_o->todpr = scb_s->todpr;
410 scb_o->gpsw = scb_s->gpsw;
411 scb_o->gg14 = scb_s->gg14;
412 scb_o->gg15 = scb_s->gg15;
413 memcpy(scb_o->gcr, scb_s->gcr, 128);
414 scb_o->pp = scb_s->pp;
419 scb_o->fpf |= scb_s->fpf & FPF_BPBC;
423 switch (scb_s->icptcode) {
428 (void *)((u64)scb_s + 0xc0), 0xf0 - 0xc0);
432 if (scb_s->ihcpu != 0xffffU)
433 scb_o->ihcpu = scb_s->ihcpu;
446 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
451 bool had_tx = scb_s->ecb & ECB_TE;
456 scb_s->icptcode = 0;
457 scb_s->eca = 0;
458 scb_s->ecb = 0;
459 scb_s->ecb2 = 0;
460 scb_s->ecb3 = 0;
461 scb_s->ecd = 0;
462 scb_s->fac = 0;
463 scb_s->fpf = 0;
470 scb_s->cputm = scb_o->cputm;
471 scb_s->ckc = scb_o->ckc;
472 scb_s->todpr = scb_o->todpr;
473 scb_s->epoch = scb_o->epoch;
476 scb_s->gpsw = scb_o->gpsw;
477 scb_s->gg14 = scb_o->gg14;
478 scb_s->gg15 = scb_o->gg15;
479 memcpy(scb_s->gcr, scb_o->gcr, 128);
480 scb_s->pp = scb_o->pp;
483 scb_s->gbea = scb_o->gbea;
484 scb_s->lctl = scb_o->lctl;
485 scb_s->svcc = scb_o->svcc;
486 scb_s->ictl = scb_o->ictl;
492 if (!(atomic_read(&scb_s->cpuflags) & CPUSTAT_KSS))
493 scb_s->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
495 scb_s->icpua = scb_o->icpua;
497 if (!(atomic_read(&scb_s->cpuflags) & CPUSTAT_SM))
500 if (scb_s->mso != new_mso || scb_s->prefix != new_prefix)
503 scb_s->msl = scb_o->msl & 0xfffffffffff00000UL;
504 scb_s->mso = new_mso;
505 scb_s->prefix = new_prefix;
508 if (scb_s->ihcpu != 0xffffU)
509 scb_s->ihcpu = scb_o->ihcpu;
512 scb_s->eca |= scb_o->eca & (ECA_MVPGI | ECA_PROTEXCI);
515 scb_s->ecb |= scb_o->ecb & ECB_HOSTPROTINT;
523 scb_s->ecb |= scb_o->ecb & ECB_PTF;
529 scb_s->ecb |= ECB_TE;
532 scb_s->ecb |= scb_o->ecb & ECB_SPECI;
535 scb_s->fpf |= scb_o->fpf & FPF_BPBC;
538 scb_s->eca |= scb_o->eca & ECA_VX;
539 scb_s->ecd |= scb_o->ecd & ECD_HOSTREGMGMT;
543 scb_s->ecb3 |= scb_o->ecb3 & ECB3_RI;
546 scb_s->ecb2 |= scb_o->ecb2 & ECB2_IEP;
549 scb_s->ecb |= scb_o->ecb & ECB_GS;
550 scb_s->ecd |= scb_o->ecd & ECD_HOSTREGMGMT;
553 scb_s->eca |= scb_o->eca & ECA_SII;
555 scb_s->eca |= scb_o->eca & ECA_IB;
557 scb_s->eca |= scb_o->eca & ECA_CEI;
560 scb_s->ecd |= scb_o->ecd & ECD_MEF;
561 scb_s->epdx = scb_o->epdx;
566 scb_s->ecd |= scb_o->ecd & ECD_ETOKENF;
568 scb_s->hpid = HPID_VSIE;
569 scb_s->cpnc = scb_o->cpnc;
601 prefix = cur->scb_s.prefix << GUEST_PREFIX_SHIFT;
603 prefix += cur->scb_s.mso;
623 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
624 u64 prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
634 prefix += scb_s->mso;
637 if (!rc && (scb_s->ecb & ECB_TE))
647 rc = set_validity_icpt(scb_s, 0x0037U);
680 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
683 hpa = (u64) scb_s->scaoh << 32 | scb_s->scaol;
687 scb_s->scaol = 0;
688 scb_s->scaoh = 0;
691 hpa = scb_s->itdba;
695 scb_s->itdba = 0;
698 hpa = scb_s->gvrd;
702 scb_s->gvrd = 0;
705 hpa = scb_s->riccbd;
709 scb_s->riccbd = 0;
712 hpa = scb_s->sdnxo;
716 scb_s->sdnxo = 0;
737 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
747 rc = set_validity_icpt(scb_s, 0x0038U);
749 rc = set_validity_icpt(scb_s, 0x0011U);
752 rc = set_validity_icpt(scb_s, 0x003bU);
756 rc = set_validity_icpt(scb_s, 0x0034U);
761 scb_s->scaoh = (u32)((u64)hpa >> 32);
762 scb_s->scaol = (u32)(u64)hpa;
766 if (gpa && (scb_s->ecb & ECB_TE)) {
768 rc = set_validity_icpt(scb_s, 0x0080U);
774 rc = set_validity_icpt(scb_s, 0x0080U);
778 scb_s->itdba = hpa;
782 if (gpa && (scb_s->eca & ECA_VX) && !(scb_s->ecd & ECD_HOSTREGMGMT)) {
784 rc = set_validity_icpt(scb_s, 0x1310U);
793 rc = set_validity_icpt(scb_s, 0x1310U);
797 scb_s->gvrd = hpa;
801 if (gpa && (scb_s->ecb3 & ECB3_RI)) {
803 rc = set_validity_icpt(scb_s, 0x0043U);
809 rc = set_validity_icpt(scb_s, 0x0043U);
814 scb_s->riccbd = hpa;
816 if (((scb_s->ecb & ECB_GS) && !(scb_s->ecd & ECD_HOSTREGMGMT)) ||
817 (scb_s->ecd & ECD_ETOKENF)) {
823 rc = set_validity_icpt(scb_s, 0x10b0U);
827 rc = set_validity_icpt(scb_s, 0x10b1U);
831 rc = set_validity_icpt(scb_s, 0x10b2U);
839 rc = set_validity_icpt(scb_s, 0x10b0U);
843 scb_s->sdnxo = hpa | sdnxc;
958 vsie_page->scb_s.icptcode = 0;
964 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
965 int ilen = insn_length(scb_s->ipa >> 8);
968 if (scb_s->icptstatus & 1) {
969 ilen = (scb_s->icptstatus >> 4) & 0x6;
973 scb_s->gpsw.addr = __rewind_psw(scb_s->gpsw, ilen);
986 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
993 return set_validity_icpt(scb_s, 0x1090U);
994 scb_s->fac = (__u32)(__u64) &vsie_page->fac;
1012 return vsie_page->scb_s.gg15;
1014 return vsie_page->scb_s.gg14;
1022 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1030 mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
1031 prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
1033 dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
1034 dest = _kvm_s390_real_to_abs(prefix, dest) + scb_s->mso;
1035 src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
1036 src = _kvm_s390_real_to_abs(prefix, src) + scb_s->mso;
1103 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1140 rc = sie64a(scb_s, vcpu->run->s.regs.gprs);
1165 switch (scb_s->icptcode) {
1167 if (scb_s->ipa == 0xb2b0)
1176 if ((scb_s->ipa & 0xf000) != 0xf000)
1177 scb_s->ipa += 0x1000;
1180 if (scb_s->ipa == 0xb254)
1234 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1236 WRITE_ONCE(vcpu->arch.vsie_block, &vsie_page->scb_s);
1247 scb_s->epoch += vcpu->kvm->arch.epoch;
1249 if (scb_s->ecd & ECD_MEF) {
1250 scb_s->epdx += vcpu->kvm->arch.epdx;
1251 if (scb_s->epoch < vcpu->kvm->arch.epoch)
1252 scb_s->epdx += 1;
1277 struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
1290 atomic_andnot(PROG_BLOCK_SIE, &scb_s->prog20);
1294 if (rc || scb_s->icptcode || signal_pending(current) ||
1312 scb_s->icptcode = ICPT_PROGI;
1313 scb_s->iprcc = PGM_ADDRESSING;
1314 scb_s->pgmilc = 4;
1315 scb_s->gpsw.addr = __rewind_psw(scb_s->gpsw, 4);
1381 memset(&vsie_page->scb_s, 0, sizeof(struct kvm_s390_sie_block));
1384 vsie_page->scb_s.ihcpu = 0xffffU;