aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/include/asm/kvm_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/include/asm/kvm_host.h')
-rw-r--r--arch/s390/include/asm/kvm_host.h58
1 files changed, 25 insertions, 33 deletions
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index eef3dd3fd9a9..2c69ba285e81 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -16,6 +16,7 @@
16#include <linux/hrtimer.h> 16#include <linux/hrtimer.h>
17#include <linux/interrupt.h> 17#include <linux/interrupt.h>
18#include <linux/kvm_host.h> 18#include <linux/kvm_host.h>
19#include <linux/kvm.h>
19#include <asm/debug.h> 20#include <asm/debug.h>
20#include <asm/cpu.h> 21#include <asm/cpu.h>
21 22
@@ -168,18 +169,6 @@ struct kvm_vcpu_stat {
168 u32 diagnose_9c; 169 u32 diagnose_9c;
169}; 170};
170 171
171struct kvm_s390_io_info {
172 __u16 subchannel_id; /* 0x0b8 */
173 __u16 subchannel_nr; /* 0x0ba */
174 __u32 io_int_parm; /* 0x0bc */
175 __u32 io_int_word; /* 0x0c0 */
176};
177
178struct kvm_s390_ext_info {
179 __u32 ext_params;
180 __u64 ext_params2;
181};
182
183#define PGM_OPERATION 0x01 172#define PGM_OPERATION 0x01
184#define PGM_PRIVILEGED_OP 0x02 173#define PGM_PRIVILEGED_OP 0x02
185#define PGM_EXECUTE 0x03 174#define PGM_EXECUTE 0x03
@@ -188,27 +177,6 @@ struct kvm_s390_ext_info {
188#define PGM_SPECIFICATION 0x06 177#define PGM_SPECIFICATION 0x06
189#define PGM_DATA 0x07 178#define PGM_DATA 0x07
190 179
191struct kvm_s390_pgm_info {
192 __u16 code;
193};
194
195struct kvm_s390_prefix_info {
196 __u32 address;
197};
198
199struct kvm_s390_extcall_info {
200 __u16 code;
201};
202
203struct kvm_s390_emerg_info {
204 __u16 code;
205};
206
207struct kvm_s390_mchk_info {
208 __u64 cr14;
209 __u64 mcic;
210};
211
212struct kvm_s390_interrupt_info { 180struct kvm_s390_interrupt_info {
213 struct list_head list; 181 struct list_head list;
214 u64 type; 182 u64 type;
@@ -246,6 +214,7 @@ struct kvm_s390_float_interrupt {
246 unsigned long idle_mask[(KVM_MAX_VCPUS + sizeof(long) - 1) 214 unsigned long idle_mask[(KVM_MAX_VCPUS + sizeof(long) - 1)
247 / sizeof(long)]; 215 / sizeof(long)];
248 struct kvm_s390_local_interrupt *local_int[KVM_MAX_VCPUS]; 216 struct kvm_s390_local_interrupt *local_int[KVM_MAX_VCPUS];
217 unsigned int irq_count;
249}; 218};
250 219
251 220
@@ -262,6 +231,10 @@ struct kvm_vcpu_arch {
262 u64 stidp_data; 231 u64 stidp_data;
263 }; 232 };
264 struct gmap *gmap; 233 struct gmap *gmap;
234#define KVM_S390_PFAULT_TOKEN_INVALID (-1UL)
235 unsigned long pfault_token;
236 unsigned long pfault_select;
237 unsigned long pfault_compare;
265}; 238};
266 239
267struct kvm_vm_stat { 240struct kvm_vm_stat {
@@ -275,6 +248,7 @@ struct kvm_arch{
275 struct sca_block *sca; 248 struct sca_block *sca;
276 debug_info_t *dbf; 249 debug_info_t *dbf;
277 struct kvm_s390_float_interrupt float_int; 250 struct kvm_s390_float_interrupt float_int;
251 struct kvm_device *flic;
278 struct gmap *gmap; 252 struct gmap *gmap;
279 int css_support; 253 int css_support;
280}; 254};
@@ -287,6 +261,24 @@ static inline bool kvm_is_error_hva(unsigned long addr)
287 return IS_ERR_VALUE(addr); 261 return IS_ERR_VALUE(addr);
288} 262}
289 263
264#define ASYNC_PF_PER_VCPU 64
265struct kvm_vcpu;
266struct kvm_async_pf;
267struct kvm_arch_async_pf {
268 unsigned long pfault_token;
269};
270
271bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu);
272
273void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
274 struct kvm_async_pf *work);
275
276void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
277 struct kvm_async_pf *work);
278
279void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
280 struct kvm_async_pf *work);
281
290extern int sie64a(struct kvm_s390_sie_block *, u64 *); 282extern int sie64a(struct kvm_s390_sie_block *, u64 *);
291extern char sie_exit; 283extern char sie_exit;
292#endif 284#endif