Skip to content

Commit

Permalink
s390/kvm: Change the virtual memory mapping location for Virtio devices
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nick Wang authored and Martin Schwidefsky committed May 2, 2013
1 parent 7b1e427 commit edefc71
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions drivers/s390/kvm/kvm_virtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -443,29 +443,30 @@ static int __init test_devices_support(unsigned long addr)
}
/*
* Init function for virtio
* devices are in a single page above top of "normal" mem
* devices are in a single page above top of "normal" + standby mem
*/
static int __init kvm_devices_init(void)
{
int rc;
unsigned long total_memory_size = sclp_get_rzm() * sclp_get_rnmax();

if (!MACHINE_IS_KVM)
return -ENODEV;

if (test_devices_support(real_memory_size) < 0)
if (test_devices_support(total_memory_size) < 0)
return -ENODEV;

rc = vmem_add_mapping(real_memory_size, PAGE_SIZE);
rc = vmem_add_mapping(total_memory_size, PAGE_SIZE);
if (rc)
return rc;

kvm_devices = (void *) real_memory_size;
kvm_devices = (void *) total_memory_size;

kvm_root = root_device_register("kvm_s390");
if (IS_ERR(kvm_root)) {
rc = PTR_ERR(kvm_root);
printk(KERN_ERR "Could not register kvm_s390 root device");
vmem_remove_mapping(real_memory_size, PAGE_SIZE);
vmem_remove_mapping(total_memory_size, PAGE_SIZE);
return rc;
}

Expand Down

0 comments on commit edefc71

Please sign in to comment.