diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2008-04-30 07:38:47 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-04-30 07:38:48 -0400 |
commit | 17f345808563d2f425b2b15d60c4a5b00112e9eb (patch) | |
tree | e12fe48f44c5d4d50cf1e92e679bc1badea0623a /drivers/s390/kvm | |
parent | 53492b1de46a7576170e865062ffcfc93bb5650b (diff) |
[S390] Convert to SPARSEMEM & SPARSEMEM_VMEMMAP
Convert s390 to SPARSEMEM and SPARSEMEM_VMEMMAP. We do a select
of SPARSEMEM_VMEMMAP since it is configurable. This is because
SPARSEMEM without SPARSEMEM_VMEMMAP gives us a hell of broken
include dependencies that I don't want to fix.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/kvm')
-rw-r--r-- | drivers/s390/kvm/kvm_virtio.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index bbef3764fbf8..47a7e6200b26 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/virtio_config.h> | 17 | #include <linux/virtio_config.h> |
18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
19 | #include <linux/virtio_ring.h> | 19 | #include <linux/virtio_ring.h> |
20 | #include <linux/pfn.h> | ||
20 | #include <asm/io.h> | 21 | #include <asm/io.h> |
21 | #include <asm/kvm_para.h> | 22 | #include <asm/kvm_para.h> |
22 | #include <asm/kvm_virtio.h> | 23 | #include <asm/kvm_virtio.h> |
@@ -180,11 +181,10 @@ static struct virtqueue *kvm_find_vq(struct virtio_device *vdev, | |||
180 | 181 | ||
181 | config = kvm_vq_config(kdev->desc)+index; | 182 | config = kvm_vq_config(kdev->desc)+index; |
182 | 183 | ||
183 | if (add_shared_memory(config->address, | 184 | err = vmem_add_mapping(config->address, |
184 | vring_size(config->num, PAGE_SIZE))) { | 185 | vring_size(config->num, PAGE_SIZE)); |
185 | err = -ENOMEM; | 186 | if (err) |
186 | goto out; | 187 | goto out; |
187 | } | ||
188 | 188 | ||
189 | vq = vring_new_virtqueue(config->num, vdev, (void *) config->address, | 189 | vq = vring_new_virtqueue(config->num, vdev, (void *) config->address, |
190 | kvm_notify, callback); | 190 | kvm_notify, callback); |
@@ -202,8 +202,8 @@ static struct virtqueue *kvm_find_vq(struct virtio_device *vdev, | |||
202 | vq->priv = config; | 202 | vq->priv = config; |
203 | return vq; | 203 | return vq; |
204 | unmap: | 204 | unmap: |
205 | remove_shared_memory(config->address, vring_size(config->num, | 205 | vmem_remove_mapping(config->address, |
206 | PAGE_SIZE)); | 206 | vring_size(config->num, PAGE_SIZE)); |
207 | out: | 207 | out: |
208 | return ERR_PTR(err); | 208 | return ERR_PTR(err); |
209 | } | 209 | } |
@@ -213,8 +213,8 @@ static void kvm_del_vq(struct virtqueue *vq) | |||
213 | struct kvm_vqconfig *config = vq->priv; | 213 | struct kvm_vqconfig *config = vq->priv; |
214 | 214 | ||
215 | vring_del_virtqueue(vq); | 215 | vring_del_virtqueue(vq); |
216 | remove_shared_memory(config->address, | 216 | vmem_remove_mapping(config->address, |
217 | vring_size(config->num, PAGE_SIZE)); | 217 | vring_size(config->num, PAGE_SIZE)); |
218 | } | 218 | } |
219 | 219 | ||
220 | /* | 220 | /* |
@@ -318,12 +318,13 @@ static int __init kvm_devices_init(void) | |||
318 | return rc; | 318 | return rc; |
319 | } | 319 | } |
320 | 320 | ||
321 | if (add_shared_memory((max_pfn) << PAGE_SHIFT, PAGE_SIZE)) { | 321 | rc = vmem_add_mapping(PFN_PHYS(max_pfn), PAGE_SIZE); |
322 | if (rc) { | ||
322 | device_unregister(&kvm_root); | 323 | device_unregister(&kvm_root); |
323 | return -ENOMEM; | 324 | return rc; |
324 | } | 325 | } |
325 | 326 | ||
326 | kvm_devices = (void *) (max_pfn << PAGE_SHIFT); | 327 | kvm_devices = (void *) PFN_PHYS(max_pfn); |
327 | 328 | ||
328 | ctl_set_bit(0, 9); | 329 | ctl_set_bit(0, 9); |
329 | register_external_interrupt(0x2603, kvm_extint_handler); | 330 | register_external_interrupt(0x2603, kvm_extint_handler); |