@@ -3329,28 +3329,30 @@ static void sca_del_vcpu(struct kvm_vcpu *vcpu)
3329
3329
static void sca_add_vcpu (struct kvm_vcpu * vcpu )
3330
3330
{
3331
3331
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 ) ;
3333
3333
3334
3334
/* 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 ;
3337
3337
return ;
3338
3338
}
3339
3339
read_lock (& vcpu -> kvm -> arch .sca_lock );
3340
3340
if (vcpu -> kvm -> arch .use_esca ) {
3341
3341
struct esca_block * sca = vcpu -> kvm -> arch .sca ;
3342
+ phys_addr_t sca_phys = virt_to_phys (sca );
3342
3343
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 ;
3346
3347
vcpu -> arch .sie_block -> ecb2 |= ECB2_ESCA ;
3347
3348
set_bit_inv (vcpu -> vcpu_id , (unsigned long * ) sca -> mcn );
3348
3349
} else {
3349
3350
struct bsca_block * sca = vcpu -> kvm -> arch .sca ;
3351
+ phys_addr_t sca_phys = virt_to_phys (sca );
3350
3352
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 ;
3354
3356
set_bit_inv (vcpu -> vcpu_id , (unsigned long * ) & sca -> mcn );
3355
3357
}
3356
3358
read_unlock (& vcpu -> kvm -> arch .sca_lock );
@@ -3381,6 +3383,7 @@ static int sca_switch_to_extended(struct kvm *kvm)
3381
3383
struct kvm_vcpu * vcpu ;
3382
3384
unsigned long vcpu_idx ;
3383
3385
u32 scaol , scaoh ;
3386
+ phys_addr_t new_sca_phys ;
3384
3387
3385
3388
if (kvm -> arch .use_esca )
3386
3389
return 0 ;
@@ -3389,8 +3392,9 @@ static int sca_switch_to_extended(struct kvm *kvm)
3389
3392
if (!new_sca )
3390
3393
return - ENOMEM ;
3391
3394
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 ;
3394
3398
3395
3399
kvm_s390_vcpu_block_all (kvm );
3396
3400
write_lock (& kvm -> arch .sca_lock );
@@ -3610,15 +3614,18 @@ static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
3610
3614
3611
3615
void kvm_s390_vcpu_unsetup_cmma (struct kvm_vcpu * vcpu )
3612
3616
{
3613
- free_page (vcpu -> arch .sie_block -> cbrlo );
3617
+ free_page (( unsigned long ) phys_to_virt ( vcpu -> arch .sie_block -> cbrlo ) );
3614
3618
vcpu -> arch .sie_block -> cbrlo = 0 ;
3615
3619
}
3616
3620
3617
3621
int kvm_s390_vcpu_setup_cmma (struct kvm_vcpu * vcpu )
3618
3622
{
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 )
3621
3626
return - ENOMEM ;
3627
+
3628
+ vcpu -> arch .sie_block -> cbrlo = virt_to_phys (cbrlo_page );
3622
3629
return 0 ;
3623
3630
}
3624
3631
@@ -3628,7 +3635,7 @@ static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu)
3628
3635
3629
3636
vcpu -> arch .sie_block -> ibc = model -> ibc ;
3630
3637
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 ) ;
3632
3639
}
3633
3640
3634
3641
static int kvm_s390_vcpu_setup (struct kvm_vcpu * vcpu )
@@ -3685,9 +3692,8 @@ static int kvm_s390_vcpu_setup(struct kvm_vcpu *vcpu)
3685
3692
VCPU_EVENT (vcpu , 3 , "AIV gisa format-%u enabled for cpu %03u" ,
3686
3693
vcpu -> arch .sie_block -> gd & 0x3 , vcpu -> vcpu_id );
3687
3694
}
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 );
3691
3697
3692
3698
if (sclp .has_kss )
3693
3699
kvm_s390_set_cpuflags (vcpu , CPUSTAT_KSS );
@@ -3737,7 +3743,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
3737
3743
return - ENOMEM ;
3738
3744
3739
3745
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 ) ;
3741
3747
3742
3748
/* the real guest size will always be smaller than msl */
3743
3749
vcpu -> arch .sie_block -> mso = 0 ;
0 commit comments