@@ -599,7 +599,6 @@ void kvm_s390_vsie_gmap_notifier(struct gmap *gmap, unsigned long start,
599
599
struct kvm * kvm = gmap -> private ;
600
600
struct vsie_page * cur ;
601
601
unsigned long prefix ;
602
- struct page * page ;
603
602
int i ;
604
603
605
604
if (!gmap_is_shadow (gmap ))
@@ -609,10 +608,9 @@ void kvm_s390_vsie_gmap_notifier(struct gmap *gmap, unsigned long start,
609
608
* therefore we can safely reference them all the time.
610
609
*/
611
610
for (i = 0 ; i < kvm -> arch .vsie .page_count ; i ++ ) {
612
- page = READ_ONCE (kvm -> arch .vsie .pages [i ]);
613
- if (!page )
611
+ cur = READ_ONCE (kvm -> arch .vsie .pages [i ]);
612
+ if (!cur )
614
613
continue ;
615
- cur = page_to_virt (page );
616
614
if (READ_ONCE (cur -> gmap ) != gmap )
617
615
continue ;
618
616
prefix = cur -> scb_s .prefix << GUEST_PREFIX_SHIFT ;
@@ -1384,14 +1382,12 @@ static void put_vsie_page(struct vsie_page *vsie_page)
1384
1382
static struct vsie_page * get_vsie_page (struct kvm * kvm , unsigned long addr )
1385
1383
{
1386
1384
struct vsie_page * vsie_page ;
1387
- struct page * page ;
1388
1385
int nr_vcpus ;
1389
1386
1390
1387
rcu_read_lock ();
1391
- page = radix_tree_lookup (& kvm -> arch .vsie .addr_to_page , addr >> 9 );
1388
+ vsie_page = radix_tree_lookup (& kvm -> arch .vsie .addr_to_page , addr >> 9 );
1392
1389
rcu_read_unlock ();
1393
- if (page ) {
1394
- vsie_page = page_to_virt (page );
1390
+ if (vsie_page ) {
1395
1391
if (try_get_vsie_page (vsie_page )) {
1396
1392
if (vsie_page -> scb_gpa == addr )
1397
1393
return vsie_page ;
@@ -1411,20 +1407,18 @@ static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr)
1411
1407
1412
1408
mutex_lock (& kvm -> arch .vsie .mutex );
1413
1409
if (kvm -> arch .vsie .page_count < nr_vcpus ) {
1414
- page = alloc_page (GFP_KERNEL_ACCOUNT | __GFP_ZERO | GFP_DMA );
1415
- if (!page ) {
1410
+ vsie_page = ( void * ) __get_free_page (GFP_KERNEL_ACCOUNT | __GFP_ZERO | GFP_DMA );
1411
+ if (!vsie_page ) {
1416
1412
mutex_unlock (& kvm -> arch .vsie .mutex );
1417
1413
return ERR_PTR (- ENOMEM );
1418
1414
}
1419
- vsie_page = page_to_virt (page );
1420
1415
__set_bit (VSIE_PAGE_IN_USE , & vsie_page -> flags );
1421
- kvm -> arch .vsie .pages [kvm -> arch .vsie .page_count ] = page ;
1416
+ kvm -> arch .vsie .pages [kvm -> arch .vsie .page_count ] = vsie_page ;
1422
1417
kvm -> arch .vsie .page_count ++ ;
1423
1418
} else {
1424
1419
/* reuse an existing entry that belongs to nobody */
1425
1420
while (true) {
1426
- page = kvm -> arch .vsie .pages [kvm -> arch .vsie .next ];
1427
- vsie_page = page_to_virt (page );
1421
+ vsie_page = kvm -> arch .vsie .pages [kvm -> arch .vsie .next ];
1428
1422
if (try_get_vsie_page (vsie_page ))
1429
1423
break ;
1430
1424
kvm -> arch .vsie .next ++ ;
@@ -1438,7 +1432,8 @@ static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr)
1438
1432
vsie_page -> scb_gpa = ULONG_MAX ;
1439
1433
1440
1434
/* Double use of the same address or allocation failure. */
1441
- if (radix_tree_insert (& kvm -> arch .vsie .addr_to_page , addr >> 9 , page )) {
1435
+ if (radix_tree_insert (& kvm -> arch .vsie .addr_to_page , addr >> 9 ,
1436
+ vsie_page )) {
1442
1437
put_vsie_page (vsie_page );
1443
1438
mutex_unlock (& kvm -> arch .vsie .mutex );
1444
1439
return NULL ;
@@ -1519,20 +1514,18 @@ void kvm_s390_vsie_init(struct kvm *kvm)
1519
1514
void kvm_s390_vsie_destroy (struct kvm * kvm )
1520
1515
{
1521
1516
struct vsie_page * vsie_page ;
1522
- struct page * page ;
1523
1517
int i ;
1524
1518
1525
1519
mutex_lock (& kvm -> arch .vsie .mutex );
1526
1520
for (i = 0 ; i < kvm -> arch .vsie .page_count ; i ++ ) {
1527
- page = kvm -> arch .vsie .pages [i ];
1521
+ vsie_page = kvm -> arch .vsie .pages [i ];
1528
1522
kvm -> arch .vsie .pages [i ] = NULL ;
1529
- vsie_page = page_to_virt (page );
1530
1523
release_gmap_shadow (vsie_page );
1531
1524
/* free the radix tree entry */
1532
1525
if (vsie_page -> scb_gpa != ULONG_MAX )
1533
1526
radix_tree_delete (& kvm -> arch .vsie .addr_to_page ,
1534
1527
vsie_page -> scb_gpa >> 9 );
1535
- __free_page ( page );
1528
+ free_page (( unsigned long ) vsie_page );
1536
1529
}
1537
1530
kvm -> arch .vsie .page_count = 0 ;
1538
1531
mutex_unlock (& kvm -> arch .vsie .mutex );
0 commit comments