aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorNick Wang <jfwang@us.ibm.com>2012-07-03 11:28:36 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-05-02 09:50:24 -0400
commitedefc7107afedd6bd59e80bc0586ddb276edfcbe (patch)
tree23e32ee83912acf8dac905625262af9f8665eca2 /drivers/s390
parent7b1e427d685e2aee91f9a622f9c2691130f8e57d (diff)
s390/kvm: Change the virtual memory mapping location for Virtio devices
The current location for mapping Virtio devices does not take into consideration of the standby memory. This causes the failure of mapping standby memory since the location for the mapping is already taken by the Virtio devices. To fix the problem, we move the location to beyond the end of standby memory. Signed-off-by: Nick Wang <jfwang@us.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/kvm/kvm_virtio.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c
index 6711e65764b5..2ea6165366b6 100644
--- a/drivers/s390/kvm/kvm_virtio.c
+++ b/drivers/s390/kvm/kvm_virtio.c
@@ -443,29 +443,30 @@ static int __init test_devices_support(unsigned long addr)
443} 443}
444/* 444/*
445 * Init function for virtio 445 * Init function for virtio
446 * devices are in a single page above top of "normal" mem 446 * devices are in a single page above top of "normal" + standby mem
447 */ 447 */
448static int __init kvm_devices_init(void) 448static int __init kvm_devices_init(void)
449{ 449{
450 int rc; 450 int rc;
451 unsigned long total_memory_size = sclp_get_rzm() * sclp_get_rnmax();
451 452
452 if (!MACHINE_IS_KVM) 453 if (!MACHINE_IS_KVM)
453 return -ENODEV; 454 return -ENODEV;
454 455
455 if (test_devices_support(real_memory_size) < 0) 456 if (test_devices_support(total_memory_size) < 0)
456 return -ENODEV; 457 return -ENODEV;
457 458
458 rc = vmem_add_mapping(real_memory_size, PAGE_SIZE); 459 rc = vmem_add_mapping(total_memory_size, PAGE_SIZE);
459 if (rc) 460 if (rc)
460 return rc; 461 return rc;
461 462
462 kvm_devices = (void *) real_memory_size; 463 kvm_devices = (void *) total_memory_size;
463 464
464 kvm_root = root_device_register("kvm_s390"); 465 kvm_root = root_device_register("kvm_s390");
465 if (IS_ERR(kvm_root)) { 466 if (IS_ERR(kvm_root)) {
466 rc = PTR_ERR(kvm_root); 467 rc = PTR_ERR(kvm_root);
467 printk(KERN_ERR "Could not register kvm_s390 root device"); 468 printk(KERN_ERR "Could not register kvm_s390 root device");
468 vmem_remove_mapping(real_memory_size, PAGE_SIZE); 469 vmem_remove_mapping(total_memory_size, PAGE_SIZE);
469 return rc; 470 return rc;
470 } 471 }
471 472