@@ -3329,28 +3329,30 @@ static void sca_del_vcpu(struct kvm_vcpu *vcpu)
33293329static void sca_add_vcpu (struct kvm_vcpu * vcpu )
33303330{
33313331 if (!kvm_s390_use_sca_entries ()) {
3332- struct bsca_block * sca = vcpu -> kvm -> arch .sca ;
3332+ phys_addr_t sca_phys = virt_to_phys ( vcpu -> kvm -> arch .sca ) ;
33333333
33343334 /* we still need the basic sca for the ipte control */
3335- vcpu -> arch .sie_block -> scaoh = ( __u32 )((( __u64 ) sca ) >> 32 ) ;
3336- vcpu -> arch .sie_block -> scaol = ( __u32 )( __u64 ) sca ;
3335+ vcpu -> arch .sie_block -> scaoh = sca_phys >> 32 ;
3336+ vcpu -> arch .sie_block -> scaol = sca_phys ;
33373337 return ;
33383338 }
33393339 read_lock (& vcpu -> kvm -> arch .sca_lock );
33403340 if (vcpu -> kvm -> arch .use_esca ) {
33413341 struct esca_block * sca = vcpu -> kvm -> arch .sca ;
3342+ phys_addr_t sca_phys = virt_to_phys (sca );
33423343
3343- sca -> cpu [vcpu -> vcpu_id ].sda = ( __u64 ) vcpu -> arch .sie_block ;
3344- vcpu -> arch .sie_block -> scaoh = ( __u32 )((( __u64 ) sca ) >> 32 ) ;
3345- vcpu -> arch .sie_block -> scaol = ( __u32 )( __u64 ) sca & ~ 0x3fU ;
3344+ sca -> cpu [vcpu -> vcpu_id ].sda = virt_to_phys ( vcpu -> arch .sie_block ) ;
3345+ vcpu -> arch .sie_block -> scaoh = sca_phys >> 32 ;
3346+ vcpu -> arch .sie_block -> scaol = sca_phys & ESCA_SCAOL_MASK ;
33463347 vcpu -> arch .sie_block -> ecb2 |= ECB2_ESCA ;
33473348 set_bit_inv (vcpu -> vcpu_id , (unsigned long * ) sca -> mcn );
33483349 } else {
33493350 struct bsca_block * sca = vcpu -> kvm -> arch .sca ;
3351+ phys_addr_t sca_phys = virt_to_phys (sca );
33503352
3351- sca -> cpu [vcpu -> vcpu_id ].sda = ( __u64 ) vcpu -> arch .sie_block ;
3352- vcpu -> arch .sie_block -> scaoh = ( __u32 )((( __u64 ) sca ) >> 32 ) ;
3353- vcpu -> arch .sie_block -> scaol = ( __u32 )( __u64 ) sca ;
3353+ sca -> cpu [vcpu -> vcpu_id ].sda = virt_to_phys ( vcpu -> arch .sie_block ) ;
3354+ vcpu -> arch .sie_block -> scaoh = sca_phys >> 32 ;
3355+ vcpu -> arch .sie_block -> scaol = sca_phys ;
33543356 set_bit_inv (vcpu -> vcpu_id , (unsigned long * ) & sca -> mcn );
33553357 }
33563358 read_unlock (& vcpu -> kvm -> arch .sca_lock );
@@ -3381,6 +3383,7 @@ static int sca_switch_to_extended(struct kvm *kvm)
33813383 struct kvm_vcpu * vcpu ;
33823384 unsigned long vcpu_idx ;
33833385 u32 scaol , scaoh ;
3386+ phys_addr_t new_sca_phys ;
33843387
33853388 if (kvm -> arch .use_esca )
33863389 return 0 ;
@@ -3389,8 +3392,9 @@ static int sca_switch_to_extended(struct kvm *kvm)
33893392 if (!new_sca )
33903393 return - ENOMEM ;
33913394
3392- scaoh = (u32 )((u64 )(new_sca ) >> 32 );
3393- scaol = (u32 )(u64 )(new_sca ) & ~0x3fU ;
3395+ new_sca_phys = virt_to_phys (new_sca );
3396+ scaoh = new_sca_phys >> 32 ;
3397+ scaol = new_sca_phys & ESCA_SCAOL_MASK ;
33943398
33953399 kvm_s390_vcpu_block_all (kvm );
33963400 write_lock (& kvm -> arch .sca_lock );
@@ -3610,15 +3614,18 @@ static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
36103614
36113615void kvm_s390_vcpu_unsetup_cmma (struct kvm_vcpu * vcpu )
36123616{
3613- free_page (vcpu -> arch .sie_block -> cbrlo );
3617+ free_page (( unsigned long ) phys_to_virt ( vcpu -> arch .sie_block -> cbrlo ) );
36143618 vcpu -> arch .sie_block -> cbrlo = 0 ;
36153619}
36163620
36173621int kvm_s390_vcpu_setup_cmma (struct kvm_vcpu * vcpu )
36183622{
3619- vcpu -> arch .sie_block -> cbrlo = get_zeroed_page (GFP_KERNEL_ACCOUNT );
3620- if (!vcpu -> arch .sie_block -> cbrlo )
3623+ void * cbrlo_page = (void * )get_zeroed_page (GFP_KERNEL_ACCOUNT );
3624+
3625+ if (!cbrlo_page )
36213626 return - ENOMEM ;
3627+
3628+ vcpu -> arch .sie_block -> cbrlo = virt_to_phys (cbrlo_page );
36223629 return 0 ;
36233630}
36243631
@@ -3628,7 +3635,7 @@ static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu)
36283635
36293636 vcpu -> arch .sie_block -> ibc = model -> ibc ;
36303637 if (test_kvm_facility (vcpu -> kvm , 7 ))
3631- vcpu -> arch .sie_block -> fac = ( u32 )( u64 ) model -> fac_list ;
3638+ vcpu -> arch .sie_block -> fac = virt_to_phys ( model -> fac_list ) ;
36323639}
36333640
36343641static int kvm_s390_vcpu_setup (struct kvm_vcpu * vcpu )
@@ -3685,9 +3692,8 @@ static int kvm_s390_vcpu_setup(struct kvm_vcpu *vcpu)
36853692 VCPU_EVENT (vcpu , 3 , "AIV gisa format-%u enabled for cpu %03u" ,
36863693 vcpu -> arch .sie_block -> gd & 0x3 , vcpu -> vcpu_id );
36873694 }
3688- vcpu -> arch .sie_block -> sdnxo = ((unsigned long ) & vcpu -> run -> s .regs .sdnx )
3689- | SDNXC ;
3690- vcpu -> arch .sie_block -> riccbd = (unsigned long ) & vcpu -> run -> s .regs .riccb ;
3695+ vcpu -> arch .sie_block -> sdnxo = virt_to_phys (& vcpu -> run -> s .regs .sdnx ) | SDNXC ;
3696+ vcpu -> arch .sie_block -> riccbd = virt_to_phys (& vcpu -> run -> s .regs .riccb );
36913697
36923698 if (sclp .has_kss )
36933699 kvm_s390_set_cpuflags (vcpu , CPUSTAT_KSS );
@@ -3737,7 +3743,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
37373743 return - ENOMEM ;
37383744
37393745 vcpu -> arch .sie_block = & sie_page -> sie_block ;
3740- vcpu -> arch .sie_block -> itdba = ( unsigned long ) & sie_page -> itdb ;
3746+ vcpu -> arch .sie_block -> itdba = virt_to_phys ( & sie_page -> itdb ) ;
37413747
37423748 /* the real guest size will always be smaller than msl */
37433749 vcpu -> arch .sie_block -> mso = 0 ;
0 commit comments