diff options
Diffstat (limited to 'arch/s390/kvm/kvm-s390.c')
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 6558b09ff579..1782cbcd2829 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -79,10 +79,6 @@ void kvm_arch_hardware_disable(void *garbage) | |||
79 | { | 79 | { |
80 | } | 80 | } |
81 | 81 | ||
82 | void decache_vcpus_on_cpu(int cpu) | ||
83 | { | ||
84 | } | ||
85 | |||
86 | int kvm_arch_hardware_setup(void) | 82 | int kvm_arch_hardware_setup(void) |
87 | { | 83 | { |
88 | return 0; | 84 | return 0; |
@@ -198,6 +194,7 @@ out_nokvm: | |||
198 | void kvm_arch_destroy_vm(struct kvm *kvm) | 194 | void kvm_arch_destroy_vm(struct kvm *kvm) |
199 | { | 195 | { |
200 | debug_unregister(kvm->arch.dbf); | 196 | debug_unregister(kvm->arch.dbf); |
197 | kvm_free_physmem(kvm); | ||
201 | free_page((unsigned long)(kvm->arch.sca)); | 198 | free_page((unsigned long)(kvm->arch.sca)); |
202 | kfree(kvm); | 199 | kfree(kvm); |
203 | module_put(THIS_MODULE); | 200 | module_put(THIS_MODULE); |
@@ -250,11 +247,16 @@ static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu) | |||
250 | vcpu->arch.sie_block->gbea = 1; | 247 | vcpu->arch.sie_block->gbea = 1; |
251 | } | 248 | } |
252 | 249 | ||
250 | /* The current code can have up to 256 pages for virtio */ | ||
251 | #define VIRTIODESCSPACE (256ul * 4096ul) | ||
252 | |||
253 | int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | 253 | int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) |
254 | { | 254 | { |
255 | atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH); | 255 | atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH); |
256 | vcpu->arch.sie_block->gmslm = 0xffffffffffUL; | 256 | vcpu->arch.sie_block->gmslm = vcpu->kvm->arch.guest_memsize + |
257 | vcpu->arch.sie_block->gmsor = 0x000000000000; | 257 | vcpu->kvm->arch.guest_origin + |
258 | VIRTIODESCSPACE - 1ul; | ||
259 | vcpu->arch.sie_block->gmsor = vcpu->kvm->arch.guest_origin; | ||
258 | vcpu->arch.sie_block->ecb = 2; | 260 | vcpu->arch.sie_block->ecb = 2; |
259 | vcpu->arch.sie_block->eca = 0xC1002001U; | 261 | vcpu->arch.sie_block->eca = 0xC1002001U; |
260 | setup_timer(&vcpu->arch.ckc_timer, kvm_s390_idle_wakeup, | 262 | setup_timer(&vcpu->arch.ckc_timer, kvm_s390_idle_wakeup, |
@@ -273,7 +275,8 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, | |||
273 | if (!vcpu) | 275 | if (!vcpu) |
274 | goto out_nomem; | 276 | goto out_nomem; |
275 | 277 | ||
276 | vcpu->arch.sie_block = (struct sie_block *) get_zeroed_page(GFP_KERNEL); | 278 | vcpu->arch.sie_block = (struct kvm_s390_sie_block *) |
279 | get_zeroed_page(GFP_KERNEL); | ||
277 | 280 | ||
278 | if (!vcpu->arch.sie_block) | 281 | if (!vcpu->arch.sie_block) |
279 | goto out_free_cpu; | 282 | goto out_free_cpu; |
@@ -672,6 +675,10 @@ int kvm_arch_set_memory_region(struct kvm *kvm, | |||
672 | return 0; | 675 | return 0; |
673 | } | 676 | } |
674 | 677 | ||
678 | void kvm_arch_flush_shadow(struct kvm *kvm) | ||
679 | { | ||
680 | } | ||
681 | |||
675 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) | 682 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) |
676 | { | 683 | { |
677 | return gfn; | 684 | return gfn; |