aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-s390/kvm_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-s390/kvm_host.h')
-rw-r--r--include/asm-s390/kvm_host.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h
index 8965b38d0a32..4fe19305888a 100644
--- a/include/asm-s390/kvm_host.h
+++ b/include/asm-s390/kvm_host.h
@@ -70,6 +70,7 @@ struct sie_block {
70 __u64 ckc; /* 0x0030 */ 70 __u64 ckc; /* 0x0030 */
71 __u64 epoch; /* 0x0038 */ 71 __u64 epoch; /* 0x0038 */
72 __u8 reserved40[4]; /* 0x0040 */ 72 __u8 reserved40[4]; /* 0x0040 */
73#define LCTL_CR0 0x8000
73 __u16 lctl; /* 0x0044 */ 74 __u16 lctl; /* 0x0044 */
74 __s16 icpua; /* 0x0046 */ 75 __s16 icpua; /* 0x0046 */
75 __u32 ictl; /* 0x0048 */ 76 __u32 ictl; /* 0x0048 */
@@ -105,8 +106,79 @@ struct kvm_vcpu_stat {
105 u32 exit_external_interrupt; 106 u32 exit_external_interrupt;
106 u32 exit_stop_request; 107 u32 exit_stop_request;
107 u32 exit_validity; 108 u32 exit_validity;
109 u32 exit_instruction;
110 u32 instruction_lctl;
111 u32 instruction_lctg;
112 u32 exit_program_interruption;
113 u32 exit_instr_and_program;
114 u32 deliver_emergency_signal;
115 u32 deliver_service_signal;
116 u32 deliver_virtio_interrupt;
117 u32 deliver_stop_signal;
118 u32 deliver_prefix_signal;
119 u32 deliver_restart_signal;
120 u32 deliver_program_int;
121 u32 exit_wait_state;
108}; 122};
109 123
124struct io_info {
125 __u16 subchannel_id; /* 0x0b8 */
126 __u16 subchannel_nr; /* 0x0ba */
127 __u32 io_int_parm; /* 0x0bc */
128 __u32 io_int_word; /* 0x0c0 */
129};
130
131struct ext_info {
132 __u32 ext_params;
133 __u64 ext_params2;
134};
135
136#define PGM_OPERATION 0x01
137#define PGM_PRIVILEGED_OPERATION 0x02
138#define PGM_EXECUTE 0x03
139#define PGM_PROTECTION 0x04
140#define PGM_ADDRESSING 0x05
141#define PGM_SPECIFICATION 0x06
142#define PGM_DATA 0x07
143
144struct pgm_info {
145 __u16 code;
146};
147
148struct prefix_info {
149 __u32 address;
150};
151
152struct interrupt_info {
153 struct list_head list;
154 u64 type;
155 union {
156 struct io_info io;
157 struct ext_info ext;
158 struct pgm_info pgm;
159 struct prefix_info prefix;
160 };
161};
162
163struct local_interrupt {
164 spinlock_t lock;
165 struct list_head list;
166 atomic_t active;
167 struct float_interrupt *float_int;
168 int timer_due; /* event indicator for waitqueue below */
169 wait_queue_head_t wq;
170};
171
172struct float_interrupt {
173 spinlock_t lock;
174 struct list_head list;
175 atomic_t active;
176 int next_rr_cpu;
177 unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)];
178 struct local_interrupt *local_int[64];
179};
180
181
110struct kvm_vcpu_arch { 182struct kvm_vcpu_arch {
111 struct sie_block *sie_block; 183 struct sie_block *sie_block;
112 unsigned long guest_gprs[16]; 184 unsigned long guest_gprs[16];
@@ -114,6 +186,8 @@ struct kvm_vcpu_arch {
114 unsigned int host_acrs[NUM_ACRS]; 186 unsigned int host_acrs[NUM_ACRS];
115 s390_fp_regs guest_fpregs; 187 s390_fp_regs guest_fpregs;
116 unsigned int guest_acrs[NUM_ACRS]; 188 unsigned int guest_acrs[NUM_ACRS];
189 struct local_interrupt local_int;
190 struct timer_list ckc_timer;
117}; 191};
118 192
119struct kvm_vm_stat { 193struct kvm_vm_stat {
@@ -125,6 +199,7 @@ struct kvm_arch{
125 unsigned long guest_memsize; 199 unsigned long guest_memsize;
126 struct sca_block *sca; 200 struct sca_block *sca;
127 debug_info_t *dbf; 201 debug_info_t *dbf;
202 struct float_interrupt float_int;
128}; 203};
129 204
130extern int sie64a(struct sie_block *, __u64 *); 205extern int sie64a(struct sie_block *, __u64 *);