diff options
-rw-r--r-- | arch/s390/kvm/interrupt.c | 32 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 3 | ||||
-rw-r--r-- | arch/s390/kvm/priv.c | 2 | ||||
-rw-r--r-- | arch/s390/kvm/sigp.c | 20 | ||||
-rw-r--r-- | include/asm-s390/kvm_host.h | 36 |
5 files changed, 47 insertions, 46 deletions
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 84a7fed4cd4e..11230b0db957 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c | |||
@@ -31,7 +31,7 @@ static int psw_interrupts_disabled(struct kvm_vcpu *vcpu) | |||
31 | } | 31 | } |
32 | 32 | ||
33 | static int __interrupt_is_deliverable(struct kvm_vcpu *vcpu, | 33 | static int __interrupt_is_deliverable(struct kvm_vcpu *vcpu, |
34 | struct interrupt_info *inti) | 34 | struct kvm_s390_interrupt_info *inti) |
35 | { | 35 | { |
36 | switch (inti->type) { | 36 | switch (inti->type) { |
37 | case KVM_S390_INT_EMERGENCY: | 37 | case KVM_S390_INT_EMERGENCY: |
@@ -91,7 +91,7 @@ static void __set_cpuflag(struct kvm_vcpu *vcpu, u32 flag) | |||
91 | } | 91 | } |
92 | 92 | ||
93 | static void __set_intercept_indicator(struct kvm_vcpu *vcpu, | 93 | static void __set_intercept_indicator(struct kvm_vcpu *vcpu, |
94 | struct interrupt_info *inti) | 94 | struct kvm_s390_interrupt_info *inti) |
95 | { | 95 | { |
96 | switch (inti->type) { | 96 | switch (inti->type) { |
97 | case KVM_S390_INT_EMERGENCY: | 97 | case KVM_S390_INT_EMERGENCY: |
@@ -111,7 +111,7 @@ static void __set_intercept_indicator(struct kvm_vcpu *vcpu, | |||
111 | } | 111 | } |
112 | 112 | ||
113 | static void __do_deliver_interrupt(struct kvm_vcpu *vcpu, | 113 | static void __do_deliver_interrupt(struct kvm_vcpu *vcpu, |
114 | struct interrupt_info *inti) | 114 | struct kvm_s390_interrupt_info *inti) |
115 | { | 115 | { |
116 | const unsigned short table[] = { 2, 4, 4, 6 }; | 116 | const unsigned short table[] = { 2, 4, 4, 6 }; |
117 | int rc, exception = 0; | 117 | int rc, exception = 0; |
@@ -290,9 +290,9 @@ static int __try_deliver_ckc_interrupt(struct kvm_vcpu *vcpu) | |||
290 | 290 | ||
291 | int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) | 291 | int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) |
292 | { | 292 | { |
293 | struct local_interrupt *li = &vcpu->arch.local_int; | 293 | struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; |
294 | struct float_interrupt *fi = vcpu->arch.local_int.float_int; | 294 | struct kvm_s390_float_interrupt *fi = vcpu->arch.local_int.float_int; |
295 | struct interrupt_info *inti; | 295 | struct kvm_s390_interrupt_info *inti; |
296 | int rc = 0; | 296 | int rc = 0; |
297 | 297 | ||
298 | if (atomic_read(&li->active)) { | 298 | if (atomic_read(&li->active)) { |
@@ -408,9 +408,9 @@ void kvm_s390_idle_wakeup(unsigned long data) | |||
408 | 408 | ||
409 | void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu) | 409 | void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu) |
410 | { | 410 | { |
411 | struct local_interrupt *li = &vcpu->arch.local_int; | 411 | struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; |
412 | struct float_interrupt *fi = vcpu->arch.local_int.float_int; | 412 | struct kvm_s390_float_interrupt *fi = vcpu->arch.local_int.float_int; |
413 | struct interrupt_info *n, *inti = NULL; | 413 | struct kvm_s390_interrupt_info *n, *inti = NULL; |
414 | int deliver; | 414 | int deliver; |
415 | 415 | ||
416 | __reset_intercept_indicators(vcpu); | 416 | __reset_intercept_indicators(vcpu); |
@@ -465,8 +465,8 @@ void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu) | |||
465 | 465 | ||
466 | int kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code) | 466 | int kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code) |
467 | { | 467 | { |
468 | struct local_interrupt *li = &vcpu->arch.local_int; | 468 | struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; |
469 | struct interrupt_info *inti; | 469 | struct kvm_s390_interrupt_info *inti; |
470 | 470 | ||
471 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); | 471 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); |
472 | if (!inti) | 472 | if (!inti) |
@@ -487,9 +487,9 @@ int kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code) | |||
487 | int kvm_s390_inject_vm(struct kvm *kvm, | 487 | int kvm_s390_inject_vm(struct kvm *kvm, |
488 | struct kvm_s390_interrupt *s390int) | 488 | struct kvm_s390_interrupt *s390int) |
489 | { | 489 | { |
490 | struct local_interrupt *li; | 490 | struct kvm_s390_local_interrupt *li; |
491 | struct float_interrupt *fi; | 491 | struct kvm_s390_float_interrupt *fi; |
492 | struct interrupt_info *inti; | 492 | struct kvm_s390_interrupt_info *inti; |
493 | int sigcpu; | 493 | int sigcpu; |
494 | 494 | ||
495 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); | 495 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); |
@@ -544,8 +544,8 @@ int kvm_s390_inject_vm(struct kvm *kvm, | |||
544 | int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, | 544 | int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, |
545 | struct kvm_s390_interrupt *s390int) | 545 | struct kvm_s390_interrupt *s390int) |
546 | { | 546 | { |
547 | struct local_interrupt *li; | 547 | struct kvm_s390_local_interrupt *li; |
548 | struct interrupt_info *inti; | 548 | struct kvm_s390_interrupt_info *inti; |
549 | 549 | ||
550 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); | 550 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); |
551 | if (!inti) | 551 | if (!inti) |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index cdab57c5bc70..399acf3f64dd 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -275,7 +275,8 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, | |||
275 | if (!vcpu) | 275 | if (!vcpu) |
276 | goto out_nomem; | 276 | goto out_nomem; |
277 | 277 | ||
278 | 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); | ||
279 | 280 | ||
280 | if (!vcpu->arch.sie_block) | 281 | if (!vcpu->arch.sie_block) |
281 | goto out_free_cpu; | 282 | goto out_free_cpu; |
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c index c02286c6a931..2e2d2ffb6a07 100644 --- a/arch/s390/kvm/priv.c +++ b/arch/s390/kvm/priv.c | |||
@@ -199,7 +199,7 @@ out: | |||
199 | 199 | ||
200 | static void handle_stsi_3_2_2(struct kvm_vcpu *vcpu, struct sysinfo_3_2_2 *mem) | 200 | static void handle_stsi_3_2_2(struct kvm_vcpu *vcpu, struct sysinfo_3_2_2 *mem) |
201 | { | 201 | { |
202 | struct float_interrupt *fi = &vcpu->kvm->arch.float_int; | 202 | struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; |
203 | int cpus = 0; | 203 | int cpus = 0; |
204 | int n; | 204 | int n; |
205 | 205 | ||
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c index 0a236acfb5f6..5a556114eaa5 100644 --- a/arch/s390/kvm/sigp.c +++ b/arch/s390/kvm/sigp.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr, u64 *reg) | 46 | static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr, u64 *reg) |
47 | { | 47 | { |
48 | struct float_interrupt *fi = &vcpu->kvm->arch.float_int; | 48 | struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; |
49 | int rc; | 49 | int rc; |
50 | 50 | ||
51 | if (cpu_addr >= KVM_MAX_VCPUS) | 51 | if (cpu_addr >= KVM_MAX_VCPUS) |
@@ -71,9 +71,9 @@ static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr, u64 *reg) | |||
71 | 71 | ||
72 | static int __sigp_emergency(struct kvm_vcpu *vcpu, u16 cpu_addr) | 72 | static int __sigp_emergency(struct kvm_vcpu *vcpu, u16 cpu_addr) |
73 | { | 73 | { |
74 | struct float_interrupt *fi = &vcpu->kvm->arch.float_int; | 74 | struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; |
75 | struct local_interrupt *li; | 75 | struct kvm_s390_local_interrupt *li; |
76 | struct interrupt_info *inti; | 76 | struct kvm_s390_interrupt_info *inti; |
77 | int rc; | 77 | int rc; |
78 | 78 | ||
79 | if (cpu_addr >= KVM_MAX_VCPUS) | 79 | if (cpu_addr >= KVM_MAX_VCPUS) |
@@ -108,9 +108,9 @@ unlock: | |||
108 | 108 | ||
109 | static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int store) | 109 | static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int store) |
110 | { | 110 | { |
111 | struct float_interrupt *fi = &vcpu->kvm->arch.float_int; | 111 | struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; |
112 | struct local_interrupt *li; | 112 | struct kvm_s390_local_interrupt *li; |
113 | struct interrupt_info *inti; | 113 | struct kvm_s390_interrupt_info *inti; |
114 | int rc; | 114 | int rc; |
115 | 115 | ||
116 | if (cpu_addr >= KVM_MAX_VCPUS) | 116 | if (cpu_addr >= KVM_MAX_VCPUS) |
@@ -169,9 +169,9 @@ static int __sigp_set_arch(struct kvm_vcpu *vcpu, u32 parameter) | |||
169 | static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address, | 169 | static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address, |
170 | u64 *reg) | 170 | u64 *reg) |
171 | { | 171 | { |
172 | struct float_interrupt *fi = &vcpu->kvm->arch.float_int; | 172 | struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; |
173 | struct local_interrupt *li; | 173 | struct kvm_s390_local_interrupt *li; |
174 | struct interrupt_info *inti; | 174 | struct kvm_s390_interrupt_info *inti; |
175 | int rc; | 175 | int rc; |
176 | u8 tmp; | 176 | u8 tmp; |
177 | 177 | ||
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h index 18cbd8a39796..3234dd5b3511 100644 --- a/include/asm-s390/kvm_host.h +++ b/include/asm-s390/kvm_host.h | |||
@@ -62,7 +62,7 @@ struct sca_block { | |||
62 | #define CPUSTAT_J 0x00000002 | 62 | #define CPUSTAT_J 0x00000002 |
63 | #define CPUSTAT_P 0x00000001 | 63 | #define CPUSTAT_P 0x00000001 |
64 | 64 | ||
65 | struct sie_block { | 65 | struct kvm_s390_sie_block { |
66 | atomic_t cpuflags; /* 0x0000 */ | 66 | atomic_t cpuflags; /* 0x0000 */ |
67 | __u32 prefix; /* 0x0004 */ | 67 | __u32 prefix; /* 0x0004 */ |
68 | __u8 reserved8[32]; /* 0x0008 */ | 68 | __u8 reserved8[32]; /* 0x0008 */ |
@@ -140,14 +140,14 @@ struct kvm_vcpu_stat { | |||
140 | u32 diagnose_44; | 140 | u32 diagnose_44; |
141 | }; | 141 | }; |
142 | 142 | ||
143 | struct io_info { | 143 | struct kvm_s390_io_info { |
144 | __u16 subchannel_id; /* 0x0b8 */ | 144 | __u16 subchannel_id; /* 0x0b8 */ |
145 | __u16 subchannel_nr; /* 0x0ba */ | 145 | __u16 subchannel_nr; /* 0x0ba */ |
146 | __u32 io_int_parm; /* 0x0bc */ | 146 | __u32 io_int_parm; /* 0x0bc */ |
147 | __u32 io_int_word; /* 0x0c0 */ | 147 | __u32 io_int_word; /* 0x0c0 */ |
148 | }; | 148 | }; |
149 | 149 | ||
150 | struct ext_info { | 150 | struct kvm_s390_ext_info { |
151 | __u32 ext_params; | 151 | __u32 ext_params; |
152 | __u64 ext_params2; | 152 | __u64 ext_params2; |
153 | }; | 153 | }; |
@@ -160,22 +160,22 @@ struct ext_info { | |||
160 | #define PGM_SPECIFICATION 0x06 | 160 | #define PGM_SPECIFICATION 0x06 |
161 | #define PGM_DATA 0x07 | 161 | #define PGM_DATA 0x07 |
162 | 162 | ||
163 | struct pgm_info { | 163 | struct kvm_s390_pgm_info { |
164 | __u16 code; | 164 | __u16 code; |
165 | }; | 165 | }; |
166 | 166 | ||
167 | struct prefix_info { | 167 | struct kvm_s390_prefix_info { |
168 | __u32 address; | 168 | __u32 address; |
169 | }; | 169 | }; |
170 | 170 | ||
171 | struct interrupt_info { | 171 | struct kvm_s390_interrupt_info { |
172 | struct list_head list; | 172 | struct list_head list; |
173 | u64 type; | 173 | u64 type; |
174 | union { | 174 | union { |
175 | struct io_info io; | 175 | struct kvm_s390_io_info io; |
176 | struct ext_info ext; | 176 | struct kvm_s390_ext_info ext; |
177 | struct pgm_info pgm; | 177 | struct kvm_s390_pgm_info pgm; |
178 | struct prefix_info prefix; | 178 | struct kvm_s390_prefix_info prefix; |
179 | }; | 179 | }; |
180 | }; | 180 | }; |
181 | 181 | ||
@@ -183,35 +183,35 @@ struct interrupt_info { | |||
183 | #define ACTION_STORE_ON_STOP 1 | 183 | #define ACTION_STORE_ON_STOP 1 |
184 | #define ACTION_STOP_ON_STOP 2 | 184 | #define ACTION_STOP_ON_STOP 2 |
185 | 185 | ||
186 | struct local_interrupt { | 186 | struct kvm_s390_local_interrupt { |
187 | spinlock_t lock; | 187 | spinlock_t lock; |
188 | struct list_head list; | 188 | struct list_head list; |
189 | atomic_t active; | 189 | atomic_t active; |
190 | struct float_interrupt *float_int; | 190 | struct kvm_s390_float_interrupt *float_int; |
191 | int timer_due; /* event indicator for waitqueue below */ | 191 | int timer_due; /* event indicator for waitqueue below */ |
192 | wait_queue_head_t wq; | 192 | wait_queue_head_t wq; |
193 | atomic_t *cpuflags; | 193 | atomic_t *cpuflags; |
194 | unsigned int action_bits; | 194 | unsigned int action_bits; |
195 | }; | 195 | }; |
196 | 196 | ||
197 | struct float_interrupt { | 197 | struct kvm_s390_float_interrupt { |
198 | spinlock_t lock; | 198 | spinlock_t lock; |
199 | struct list_head list; | 199 | struct list_head list; |
200 | atomic_t active; | 200 | atomic_t active; |
201 | int next_rr_cpu; | 201 | int next_rr_cpu; |
202 | unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)]; | 202 | unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)]; |
203 | struct local_interrupt *local_int[64]; | 203 | struct kvm_s390_local_interrupt *local_int[64]; |
204 | }; | 204 | }; |
205 | 205 | ||
206 | 206 | ||
207 | struct kvm_vcpu_arch { | 207 | struct kvm_vcpu_arch { |
208 | struct sie_block *sie_block; | 208 | struct kvm_s390_sie_block *sie_block; |
209 | unsigned long guest_gprs[16]; | 209 | unsigned long guest_gprs[16]; |
210 | s390_fp_regs host_fpregs; | 210 | s390_fp_regs host_fpregs; |
211 | unsigned int host_acrs[NUM_ACRS]; | 211 | unsigned int host_acrs[NUM_ACRS]; |
212 | s390_fp_regs guest_fpregs; | 212 | s390_fp_regs guest_fpregs; |
213 | unsigned int guest_acrs[NUM_ACRS]; | 213 | unsigned int guest_acrs[NUM_ACRS]; |
214 | struct local_interrupt local_int; | 214 | struct kvm_s390_local_interrupt local_int; |
215 | struct timer_list ckc_timer; | 215 | struct timer_list ckc_timer; |
216 | union { | 216 | union { |
217 | cpuid_t cpu_id; | 217 | cpuid_t cpu_id; |
@@ -228,8 +228,8 @@ struct kvm_arch{ | |||
228 | unsigned long guest_memsize; | 228 | unsigned long guest_memsize; |
229 | struct sca_block *sca; | 229 | struct sca_block *sca; |
230 | debug_info_t *dbf; | 230 | debug_info_t *dbf; |
231 | struct float_interrupt float_int; | 231 | struct kvm_s390_float_interrupt float_int; |
232 | }; | 232 | }; |
233 | 233 | ||
234 | extern int sie64a(struct sie_block *, __u64 *); | 234 | extern int sie64a(struct kvm_s390_sie_block *, __u64 *); |
235 | #endif | 235 | #endif |