Symbol: vsie_page
arch/s390/include/asm/kvm_host.h
628
struct vsie_page;
arch/s390/include/asm/kvm_host.h
635
struct vsie_page *pages[KVM_MAX_VCPUS];
arch/s390/kvm/vsie.c
1003
clear_vsie_icpt(vsie_page);
arch/s390/kvm/vsie.c
1006
static int handle_stfle_0(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page,
arch/s390/kvm/vsie.c
1009
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
1016
if (read_guest_real(vcpu, fac_list_origin, &vsie_page->fac,
arch/s390/kvm/vsie.c
1019
scb_s->fac = (u32)virt_to_phys(&vsie_page->fac);
arch/s390/kvm/vsie.c
102
static void prefix_mapped(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1023
static int handle_stfle_2(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, u32 fac_list_origin)
arch/s390/kvm/vsie.c
1025
struct kvm_s390_flcb2 *flcb_s = (struct kvm_s390_flcb2 *)vsie_page->fac;
arch/s390/kvm/vsie.c
1026
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
104
atomic_andnot(PROG_REQUEST, &vsie_page->scb_s.prog20);
arch/s390/kvm/vsie.c
1041
scb_s->fac = (u32)virt_to_phys(&vsie_page->fac) | S390_ARCH_FAC_FORMAT_2;
arch/s390/kvm/vsie.c
1052
static int handle_stfle(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1055
u32 fac = READ_ONCE(vsie_page->scb_o->fac);
arch/s390/kvm/vsie.c
1060
BUILD_BUG_ON(sizeof(vsie_page->fac) < ((S390_ARCH_FAC_LIST_SIZE_U64 + 1) * sizeof(u64)));
arch/s390/kvm/vsie.c
1061
BUILD_BUG_ON(!IS_ALIGNED(offsetof(struct vsie_page, fac), 8));
arch/s390/kvm/vsie.c
1064
retry_vsie_icpt(vsie_page);
arch/s390/kvm/vsie.c
1074
return handle_stfle_0(vcpu, vsie_page, origin);
arch/s390/kvm/vsie.c
1076
return set_validity_icpt(&vsie_page->scb_s, 0x1330U);
arch/s390/kvm/vsie.c
1078
return handle_stfle_2(vcpu, vsie_page, origin);
arch/s390/kvm/vsie.c
108
static int prefix_is_mapped(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1080
return set_validity_icpt(&vsie_page->scb_s, 0x1330U);
arch/s390/kvm/vsie.c
1093
static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, u8 reg)
arch/s390/kvm/vsie.c
1099
return vsie_page->scb_s.gg15;
arch/s390/kvm/vsie.c
110
return !(atomic_read(&vsie_page->scb_s.prog20) & PROG_REQUEST);
arch/s390/kvm/vsie.c
1101
return vsie_page->scb_s.gg14;
arch/s390/kvm/vsie.c
1107
static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, struct gmap *sg)
arch/s390/kvm/vsie.c
1109
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
1111
u64 *pei_block = &vsie_page->scb_o->mcic;
arch/s390/kvm/vsie.c
1121
dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
arch/s390/kvm/vsie.c
1123
src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
arch/s390/kvm/vsie.c
1133
retry_vsie_icpt(vsie_page);
arch/s390/kvm/vsie.c
114
static void update_intervention_requests(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1144
clear_vsie_icpt(vsie_page);
arch/s390/kvm/vsie.c
1167
retry_vsie_icpt(vsie_page);
arch/s390/kvm/vsie.c
1187
static int do_vsie_run(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, struct gmap *sg)
arch/s390/kvm/vsie.c
119
cpuflags = atomic_read(&vsie_page->scb_o->cpuflags);
arch/s390/kvm/vsie.c
1191
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
1192
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
1197
handle_last_fault(vcpu, vsie_page, sg);
arch/s390/kvm/vsie.c
120
atomic_andnot(bits, &vsie_page->scb_s.cpuflags);
arch/s390/kvm/vsie.c
121
atomic_or(cpuflags & bits, &vsie_page->scb_s.cpuflags);
arch/s390/kvm/vsie.c
125
static int prepare_cpuflags(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1251
kvm_s390_reinject_machine_check(vcpu, &vsie_page->mcck_info);
arch/s390/kvm/vsie.c
1260
return handle_fault(vcpu, vsie_page, sg);
arch/s390/kvm/vsie.c
1265
rc = handle_stfle(vcpu, vsie_page);
arch/s390/kvm/vsie.c
127
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
1270
clear_vsie_icpt(vsie_page);
arch/s390/kvm/vsie.c
1278
rc = vsie_handle_mvpg(vcpu, vsie_page, sg);
arch/s390/kvm/vsie.c
128
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
1284
static void release_gmap_shadow(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1286
struct gmap *gmap = vsie_page->gmap_cache.gmap;
arch/s390/kvm/vsie.c
1290
list_del(&vsie_page->gmap_cache.list);
arch/s390/kvm/vsie.c
1291
vsie_page->gmap_cache.gmap = NULL;
arch/s390/kvm/vsie.c
1292
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
1300
static struct gmap *acquire_gmap_shadow(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1313
gmap = vsie_page->gmap_cache.gmap;
arch/s390/kvm/vsie.c
1326
release_gmap_shadow(vsie_page);
arch/s390/kvm/vsie.c
1335
if (vsie_page->gmap_cache.gmap)
arch/s390/kvm/vsie.c
1336
release_gmap_shadow(vsie_page);
arch/s390/kvm/vsie.c
1342
list_add(&vsie_page->gmap_cache.list, &gmap->scb_users);
arch/s390/kvm/vsie.c
1343
vsie_page->gmap_cache.gmap = gmap;
arch/s390/kvm/vsie.c
1344
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
1353
struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1355
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
1357
WRITE_ONCE(vcpu->arch.vsie_block, &vsie_page->scb_s);
arch/s390/kvm/vsie.c
1396
static int vsie_run(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1398
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
1403
sg = acquire_gmap_shadow(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1409
rc = map_prefix(vcpu, vsie_page, sg);
arch/s390/kvm/vsie.c
1411
update_intervention_requests(vsie_page);
arch/s390/kvm/vsie.c
1412
rc = do_vsie_run(vcpu, vsie_page, sg);
arch/s390/kvm/vsie.c
1463
static inline bool try_get_vsie_page(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1465
if (test_bit(VSIE_PAGE_IN_USE, &vsie_page->flags))
arch/s390/kvm/vsie.c
1467
return !test_and_set_bit(VSIE_PAGE_IN_USE, &vsie_page->flags);
arch/s390/kvm/vsie.c
1471
static void put_vsie_page(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
1473
clear_bit(VSIE_PAGE_IN_USE, &vsie_page->flags);
arch/s390/kvm/vsie.c
1483
static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr)
arch/s390/kvm/vsie.c
1485
struct vsie_page *vsie_page;
arch/s390/kvm/vsie.c
1489
vsie_page = radix_tree_lookup(&kvm->arch.vsie.addr_to_page, addr >> 9);
arch/s390/kvm/vsie.c
1491
if (vsie_page) {
arch/s390/kvm/vsie.c
1492
if (try_get_vsie_page(vsie_page)) {
arch/s390/kvm/vsie.c
1493
if (vsie_page->scb_gpa == addr)
arch/s390/kvm/vsie.c
1494
return vsie_page;
arch/s390/kvm/vsie.c
1499
put_vsie_page(vsie_page);
arch/s390/kvm/vsie.c
1511
vsie_page = (void *)__get_free_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO | GFP_DMA);
arch/s390/kvm/vsie.c
1512
if (!vsie_page) {
arch/s390/kvm/vsie.c
1516
__set_bit(VSIE_PAGE_IN_USE, &vsie_page->flags);
arch/s390/kvm/vsie.c
1517
kvm->arch.vsie.pages[kvm->arch.vsie.page_count] = vsie_page;
arch/s390/kvm/vsie.c
1522
vsie_page = kvm->arch.vsie.pages[kvm->arch.vsie.next];
arch/s390/kvm/vsie.c
1523
if (try_get_vsie_page(vsie_page))
arch/s390/kvm/vsie.c
1528
if (vsie_page->scb_gpa != ULONG_MAX)
arch/s390/kvm/vsie.c
1530
vsie_page->scb_gpa >> 9);
arch/s390/kvm/vsie.c
1533
vsie_page->scb_gpa = ULONG_MAX;
arch/s390/kvm/vsie.c
1536
if (radix_tree_insert(&kvm->arch.vsie.addr_to_page, addr >> 9, vsie_page)) {
arch/s390/kvm/vsie.c
1537
put_vsie_page(vsie_page);
arch/s390/kvm/vsie.c
1541
vsie_page->scb_gpa = addr;
arch/s390/kvm/vsie.c
1544
memset(&vsie_page->scb_s, 0, sizeof(struct kvm_s390_sie_block));
arch/s390/kvm/vsie.c
1545
if (vsie_page->gmap_cache.gmap) {
arch/s390/kvm/vsie.c
1547
if (vsie_page->gmap_cache.gmap)
arch/s390/kvm/vsie.c
1548
release_gmap_shadow(vsie_page);
arch/s390/kvm/vsie.c
1550
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
1551
vsie_page->fault_addr = 0;
arch/s390/kvm/vsie.c
1552
vsie_page->scb_s.ihcpu = 0xffffU;
arch/s390/kvm/vsie.c
1553
return vsie_page;
arch/s390/kvm/vsie.c
1558
struct vsie_page *vsie_page;
arch/s390/kvm/vsie.c
1568
BUILD_BUG_ON(sizeof(struct vsie_page) != PAGE_SIZE);
arch/s390/kvm/vsie.c
1580
vsie_page = get_vsie_page(vcpu->kvm, scb_addr);
arch/s390/kvm/vsie.c
1581
if (IS_ERR(vsie_page)) {
arch/s390/kvm/vsie.c
1582
return PTR_ERR(vsie_page);
arch/s390/kvm/vsie.c
1583
} else if (!vsie_page) {
arch/s390/kvm/vsie.c
1589
rc = pin_scb(vcpu, vsie_page, scb_addr);
arch/s390/kvm/vsie.c
1592
rc = shadow_scb(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1595
rc = pin_blocks(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1598
register_shadow_scb(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1599
rc = vsie_run(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1601
unpin_blocks(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1603
unshadow_scb(vcpu, vsie_page);
arch/s390/kvm/vsie.c
1605
unpin_scb(vcpu, vsie_page, scb_addr);
arch/s390/kvm/vsie.c
1607
put_vsie_page(vsie_page);
arch/s390/kvm/vsie.c
1622
struct vsie_page *vsie_page;
arch/s390/kvm/vsie.c
1627
vsie_page = kvm->arch.vsie.pages[i];
arch/s390/kvm/vsie.c
1629
if (vsie_page->gmap_cache.gmap)
arch/s390/kvm/vsie.c
1630
release_gmap_shadow(vsie_page);
arch/s390/kvm/vsie.c
1633
if (vsie_page->scb_gpa != ULONG_MAX)
arch/s390/kvm/vsie.c
1635
vsie_page->scb_gpa >> 9);
arch/s390/kvm/vsie.c
1636
free_page((unsigned long)vsie_page);
arch/s390/kvm/vsie.c
318
static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
320
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
321
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
350
ret = setup_apcb(vcpu, &vsie_page->crycb, crycb_addr,
arch/s390/kvm/vsie.c
368
vsie_page->crycb.dea_wrapping_key_mask, 56))
arch/s390/kvm/vsie.c
375
b1 = (unsigned long *) vsie_page->crycb.dea_wrapping_key_mask;
arch/s390/kvm/vsie.c
389
scb_s->crycbd = (u32)virt_to_phys(&vsie_page->crycb) | CRYCB_FORMAT2;
arch/s390/kvm/vsie.c
393
static void shadow_esa(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
395
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
405
static void prepare_ibc(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
407
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
408
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
428
static void unshadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
430
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
431
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
479
static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
481
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
482
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
501
rc = prepare_cpuflags(vcpu, vsie_page);
arch/s390/kvm/vsie.c
542
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
569
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
613
shadow_esa(vcpu, vsie_page);
arch/s390/kvm/vsie.c
615
prepare_ibc(vcpu, vsie_page);
arch/s390/kvm/vsie.c
616
rc = shadow_crycb(vcpu, vsie_page);
arch/s390/kvm/vsie.c
619
unshadow_scb(vcpu, vsie_page);
arch/s390/kvm/vsie.c
625
struct vsie_page *cur, *next;
arch/s390/kvm/vsie.c
654
static int map_prefix(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, struct gmap *sg)
arch/s390/kvm/vsie.c
656
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
660
if (prefix_is_mapped(vsie_page))
arch/s390/kvm/vsie.c
664
prefix_mapped(vsie_page);
arch/s390/kvm/vsie.c
677
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
710
static void unpin_blocks(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
712
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
717
unpin_guest_page(vcpu->kvm, vsie_page->sca_gpa, hpa);
arch/s390/kvm/vsie.c
718
vsie_page->sca_gpa = 0;
arch/s390/kvm/vsie.c
725
unpin_guest_page(vcpu->kvm, vsie_page->itdba_gpa, hpa);
arch/s390/kvm/vsie.c
726
vsie_page->itdba_gpa = 0;
arch/s390/kvm/vsie.c
73
static_assert(sizeof(struct vsie_page) == PAGE_SIZE);
arch/s390/kvm/vsie.c
732
unpin_guest_page(vcpu->kvm, vsie_page->gvrd_gpa, hpa);
arch/s390/kvm/vsie.c
733
vsie_page->gvrd_gpa = 0;
arch/s390/kvm/vsie.c
739
unpin_guest_page(vcpu->kvm, vsie_page->riccbd_gpa, hpa);
arch/s390/kvm/vsie.c
740
vsie_page->riccbd_gpa = 0;
arch/s390/kvm/vsie.c
746
unpin_guest_page(vcpu->kvm, vsie_page->sdnx_gpa, hpa);
arch/s390/kvm/vsie.c
747
vsie_page->sdnx_gpa = 0;
arch/s390/kvm/vsie.c
766
static int pin_blocks(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
768
struct kvm_s390_sie_block *scb_o = vsie_page->scb_o;
arch/s390/kvm/vsie.c
769
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
arch/s390/kvm/vsie.c
792
vsie_page->sca_gpa = gpa;
arch/s390/kvm/vsie.c
809
vsie_page->itdba_gpa = gpa;
arch/s390/kvm/vsie.c
828
vsie_page->gvrd_gpa = gpa;
arch/s390/kvm/vsie.c
845
vsie_page->riccbd_gpa = gpa;
arch/s390/kvm/vsie.c
86
static void prefix_unmapped(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
874
vsie_page->sdnx_gpa = gpa;
arch/s390/kvm/vsie.c
879
unpin_blocks(vcpu, vsie_page);
arch/s390/kvm/vsie.c
88
atomic_or(PROG_REQUEST, &vsie_page->scb_s.prog20);
arch/s390/kvm/vsie.c
884
static void unpin_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page,
arch/s390/kvm/vsie.c
887
hpa_t hpa = virt_to_phys(vsie_page->scb_o);
arch/s390/kvm/vsie.c
891
vsie_page->scb_o = NULL;
arch/s390/kvm/vsie.c
900
static int pin_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page,
arch/s390/kvm/vsie.c
912
vsie_page->scb_o = phys_to_virt(hpa);
arch/s390/kvm/vsie.c
92
static void prefix_unmapped_sync(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
94
prefix_unmapped(vsie_page);
arch/s390/kvm/vsie.c
95
if (vsie_page->scb_s.prog0c & PROG_IN_SIE)
arch/s390/kvm/vsie.c
952
static int handle_fault(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, struct gmap *sg)
arch/s390/kvm/vsie.c
96
atomic_or(CPUSTAT_STOP_INT, &vsie_page->scb_s.cpuflags);
arch/s390/kvm/vsie.c
967
vsie_page->fault_addr = current->thread.gmap_teid.addr * PAGE_SIZE;
arch/s390/kvm/vsie.c
97
while (vsie_page->scb_s.prog0c & PROG_IN_SIE)
arch/s390/kvm/vsie.c
978
static void handle_last_fault(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, struct gmap *sg)
arch/s390/kvm/vsie.c
980
if (vsie_page->fault_addr)
arch/s390/kvm/vsie.c
981
gaccess_shadow_fault(vcpu, sg, vsie_page->fault_addr, NULL, true);
arch/s390/kvm/vsie.c
982
vsie_page->fault_addr = 0;
arch/s390/kvm/vsie.c
985
static inline void clear_vsie_icpt(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
987
vsie_page->scb_s.icptcode = 0;
arch/s390/kvm/vsie.c
991
static void retry_vsie_icpt(struct vsie_page *vsie_page)
arch/s390/kvm/vsie.c
993
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;