.. | .. |
---|
18 | 18 | #include <linux/kvm_host.h> |
---|
19 | 19 | #include <linux/kvm.h> |
---|
20 | 20 | #include <linux/seqlock.h> |
---|
| 21 | +#include <linux/module.h> |
---|
21 | 22 | #include <asm/debug.h> |
---|
22 | 23 | #include <asm/cpu.h> |
---|
23 | 24 | #include <asm/fpu/api.h> |
---|
.. | .. |
---|
36 | 37 | */ |
---|
37 | 38 | #define KVM_NR_IRQCHIPS 1 |
---|
38 | 39 | #define KVM_IRQCHIP_NUM_PINS 1 |
---|
39 | | -#define KVM_HALT_POLL_NS_DEFAULT 80000 |
---|
| 40 | +#define KVM_HALT_POLL_NS_DEFAULT 50000 |
---|
40 | 41 | |
---|
41 | 42 | /* s390-specific vcpu->requests bit members */ |
---|
42 | 43 | #define KVM_REQ_ENABLE_IBS KVM_ARCH_REQ(0) |
---|
.. | .. |
---|
44 | 45 | #define KVM_REQ_ICPT_OPEREXC KVM_ARCH_REQ(2) |
---|
45 | 46 | #define KVM_REQ_START_MIGRATION KVM_ARCH_REQ(3) |
---|
46 | 47 | #define KVM_REQ_STOP_MIGRATION KVM_ARCH_REQ(4) |
---|
| 48 | +#define KVM_REQ_VSIE_RESTART KVM_ARCH_REQ(5) |
---|
47 | 49 | |
---|
48 | 50 | #define SIGP_CTRL_C 0x80 |
---|
49 | 51 | #define SIGP_CTRL_SCN_MASK 0x3f |
---|
.. | .. |
---|
120 | 122 | __u32 reserved; |
---|
121 | 123 | }; |
---|
122 | 124 | |
---|
| 125 | +#define CR0_INITIAL_MASK (CR0_UNUSED_56 | CR0_INTERRUPT_KEY_SUBMASK | \ |
---|
| 126 | + CR0_MEASUREMENT_ALERT_SUBMASK) |
---|
| 127 | +#define CR14_INITIAL_MASK (CR14_UNUSED_32 | CR14_UNUSED_33 | \ |
---|
| 128 | + CR14_EXTERNAL_DAMAGE_SUBMASK) |
---|
| 129 | + |
---|
| 130 | +#define SIDAD_SIZE_MASK 0xff |
---|
| 131 | +#define sida_origin(sie_block) \ |
---|
| 132 | + ((sie_block)->sidad & PAGE_MASK) |
---|
| 133 | +#define sida_size(sie_block) \ |
---|
| 134 | + ((((sie_block)->sidad & SIDAD_SIZE_MASK) + 1) * PAGE_SIZE) |
---|
| 135 | + |
---|
123 | 136 | #define CPUSTAT_STOPPED 0x80000000 |
---|
124 | 137 | #define CPUSTAT_WAIT 0x10000000 |
---|
125 | 138 | #define CPUSTAT_ECALL_PEND 0x08000000 |
---|
.. | .. |
---|
153 | 166 | __u8 reserved08[4]; /* 0x0008 */ |
---|
154 | 167 | #define PROG_IN_SIE (1<<0) |
---|
155 | 168 | __u32 prog0c; /* 0x000c */ |
---|
156 | | - __u8 reserved10[16]; /* 0x0010 */ |
---|
| 169 | + union { |
---|
| 170 | + __u8 reserved10[16]; /* 0x0010 */ |
---|
| 171 | + struct { |
---|
| 172 | + __u64 pv_handle_cpu; |
---|
| 173 | + __u64 pv_handle_config; |
---|
| 174 | + }; |
---|
| 175 | + }; |
---|
157 | 176 | #define PROG_BLOCK_SIE (1<<0) |
---|
158 | 177 | #define PROG_REQUEST (1<<1) |
---|
159 | 178 | atomic_t prog20; /* 0x0020 */ |
---|
.. | .. |
---|
186 | 205 | #define ECA_AIV 0x00200000 |
---|
187 | 206 | #define ECA_VX 0x00020000 |
---|
188 | 207 | #define ECA_PROTEXCI 0x00002000 |
---|
| 208 | +#define ECA_APIE 0x00000008 |
---|
189 | 209 | #define ECA_SII 0x00000001 |
---|
190 | 210 | __u32 eca; /* 0x004c */ |
---|
191 | 211 | #define ICPT_INST 0x04 |
---|
.. | .. |
---|
201 | 221 | #define ICPT_PARTEXEC 0x38 |
---|
202 | 222 | #define ICPT_IOINST 0x40 |
---|
203 | 223 | #define ICPT_KSS 0x5c |
---|
| 224 | +#define ICPT_MCHKREQ 0x60 |
---|
| 225 | +#define ICPT_INT_ENABLE 0x64 |
---|
| 226 | +#define ICPT_PV_INSTR 0x68 |
---|
| 227 | +#define ICPT_PV_NOTIFY 0x6c |
---|
| 228 | +#define ICPT_PV_PREF 0x70 |
---|
204 | 229 | __u8 icptcode; /* 0x0050 */ |
---|
205 | 230 | __u8 icptstatus; /* 0x0051 */ |
---|
206 | 231 | __u16 ihcpu; /* 0x0052 */ |
---|
207 | | - __u8 reserved54[2]; /* 0x0054 */ |
---|
| 232 | + __u8 reserved54; /* 0x0054 */ |
---|
| 233 | +#define IICTL_CODE_NONE 0x00 |
---|
| 234 | +#define IICTL_CODE_MCHK 0x01 |
---|
| 235 | +#define IICTL_CODE_EXT 0x02 |
---|
| 236 | +#define IICTL_CODE_IO 0x03 |
---|
| 237 | +#define IICTL_CODE_RESTART 0x04 |
---|
| 238 | +#define IICTL_CODE_SPECIFICATION 0x10 |
---|
| 239 | +#define IICTL_CODE_OPERAND 0x11 |
---|
| 240 | + __u8 iictl; /* 0x0055 */ |
---|
208 | 241 | __u16 ipa; /* 0x0056 */ |
---|
209 | 242 | __u32 ipb; /* 0x0058 */ |
---|
210 | 243 | __u32 scaoh; /* 0x005c */ |
---|
.. | .. |
---|
225 | 258 | #define ECB3_RI 0x01 |
---|
226 | 259 | __u8 ecb3; /* 0x0063 */ |
---|
227 | 260 | __u32 scaol; /* 0x0064 */ |
---|
228 | | - __u8 reserved68; /* 0x0068 */ |
---|
| 261 | + __u8 sdf; /* 0x0068 */ |
---|
229 | 262 | __u8 epdx; /* 0x0069 */ |
---|
230 | | - __u8 reserved6a[2]; /* 0x006a */ |
---|
| 263 | + __u8 cpnc; /* 0x006a */ |
---|
| 264 | + __u8 reserved6b; /* 0x006b */ |
---|
231 | 265 | __u32 todpr; /* 0x006c */ |
---|
232 | 266 | #define GISA_FORMAT1 0x00000001 |
---|
233 | 267 | __u32 gd; /* 0x0070 */ |
---|
.. | .. |
---|
237 | 271 | psw_t gpsw; /* 0x0090 */ |
---|
238 | 272 | __u64 gg14; /* 0x00a0 */ |
---|
239 | 273 | __u64 gg15; /* 0x00a8 */ |
---|
240 | | - __u8 reservedb0[20]; /* 0x00b0 */ |
---|
241 | | - __u16 extcpuaddr; /* 0x00c4 */ |
---|
242 | | - __u16 eic; /* 0x00c6 */ |
---|
| 274 | + __u8 reservedb0[8]; /* 0x00b0 */ |
---|
| 275 | +#define HPID_KVM 0x4 |
---|
| 276 | +#define HPID_VSIE 0x5 |
---|
| 277 | + __u8 hpid; /* 0x00b8 */ |
---|
| 278 | + __u8 reservedb9[7]; /* 0x00b9 */ |
---|
| 279 | + union { |
---|
| 280 | + struct { |
---|
| 281 | + __u32 eiparams; /* 0x00c0 */ |
---|
| 282 | + __u16 extcpuaddr; /* 0x00c4 */ |
---|
| 283 | + __u16 eic; /* 0x00c6 */ |
---|
| 284 | + }; |
---|
| 285 | + __u64 mcic; /* 0x00c0 */ |
---|
| 286 | + } __packed; |
---|
243 | 287 | __u32 reservedc8; /* 0x00c8 */ |
---|
244 | | - __u16 pgmilc; /* 0x00cc */ |
---|
245 | | - __u16 iprcc; /* 0x00ce */ |
---|
246 | | - __u32 dxc; /* 0x00d0 */ |
---|
247 | | - __u16 mcn; /* 0x00d4 */ |
---|
248 | | - __u8 perc; /* 0x00d6 */ |
---|
249 | | - __u8 peratmid; /* 0x00d7 */ |
---|
| 288 | + union { |
---|
| 289 | + struct { |
---|
| 290 | + __u16 pgmilc; /* 0x00cc */ |
---|
| 291 | + __u16 iprcc; /* 0x00ce */ |
---|
| 292 | + }; |
---|
| 293 | + __u32 edc; /* 0x00cc */ |
---|
| 294 | + } __packed; |
---|
| 295 | + union { |
---|
| 296 | + struct { |
---|
| 297 | + __u32 dxc; /* 0x00d0 */ |
---|
| 298 | + __u16 mcn; /* 0x00d4 */ |
---|
| 299 | + __u8 perc; /* 0x00d6 */ |
---|
| 300 | + __u8 peratmid; /* 0x00d7 */ |
---|
| 301 | + }; |
---|
| 302 | + __u64 faddr; /* 0x00d0 */ |
---|
| 303 | + } __packed; |
---|
250 | 304 | __u64 peraddr; /* 0x00d8 */ |
---|
251 | 305 | __u8 eai; /* 0x00e0 */ |
---|
252 | 306 | __u8 peraid; /* 0x00e1 */ |
---|
253 | 307 | __u8 oai; /* 0x00e2 */ |
---|
254 | 308 | __u8 armid; /* 0x00e3 */ |
---|
255 | 309 | __u8 reservede4[4]; /* 0x00e4 */ |
---|
256 | | - __u64 tecmc; /* 0x00e8 */ |
---|
257 | | - __u8 reservedf0[12]; /* 0x00f0 */ |
---|
| 310 | + union { |
---|
| 311 | + __u64 tecmc; /* 0x00e8 */ |
---|
| 312 | + struct { |
---|
| 313 | + __u16 subchannel_id; /* 0x00e8 */ |
---|
| 314 | + __u16 subchannel_nr; /* 0x00ea */ |
---|
| 315 | + __u32 io_int_parm; /* 0x00ec */ |
---|
| 316 | + __u32 io_int_word; /* 0x00f0 */ |
---|
| 317 | + }; |
---|
| 318 | + } __packed; |
---|
| 319 | + __u8 reservedf4[8]; /* 0x00f4 */ |
---|
| 320 | +#define CRYCB_FORMAT_MASK 0x00000003 |
---|
| 321 | +#define CRYCB_FORMAT0 0x00000000 |
---|
258 | 322 | #define CRYCB_FORMAT1 0x00000001 |
---|
259 | 323 | #define CRYCB_FORMAT2 0x00000003 |
---|
260 | 324 | __u32 crycbd; /* 0x00fc */ |
---|
261 | 325 | __u64 gcr[16]; /* 0x0100 */ |
---|
262 | | - __u64 gbea; /* 0x0180 */ |
---|
| 326 | + union { |
---|
| 327 | + __u64 gbea; /* 0x0180 */ |
---|
| 328 | + __u64 sidad; |
---|
| 329 | + }; |
---|
263 | 330 | __u8 reserved188[8]; /* 0x0188 */ |
---|
264 | 331 | __u64 sdnxo; /* 0x0190 */ |
---|
265 | 332 | __u8 reserved198[8]; /* 0x0198 */ |
---|
.. | .. |
---|
270 | 337 | #define ECD_HOSTREGMGMT 0x20000000 |
---|
271 | 338 | #define ECD_MEF 0x08000000 |
---|
272 | 339 | #define ECD_ETOKENF 0x02000000 |
---|
| 340 | +#define ECD_ECC 0x00200000 |
---|
273 | 341 | __u32 ecd; /* 0x01c8 */ |
---|
274 | 342 | __u8 reserved1cc[18]; /* 0x01cc */ |
---|
275 | 343 | __u64 pp; /* 0x01de */ |
---|
.. | .. |
---|
277 | 345 | __u64 itdba; /* 0x01e8 */ |
---|
278 | 346 | __u64 riccbd; /* 0x01f0 */ |
---|
279 | 347 | __u64 gvrd; /* 0x01f8 */ |
---|
280 | | -} __attribute__((packed)); |
---|
| 348 | +} __packed __aligned(512); |
---|
281 | 349 | |
---|
282 | 350 | struct kvm_s390_itdb { |
---|
283 | 351 | __u8 data[256]; |
---|
.. | .. |
---|
286 | 354 | struct sie_page { |
---|
287 | 355 | struct kvm_s390_sie_block sie_block; |
---|
288 | 356 | struct mcck_volatile_info mcck_info; /* 0x0200 */ |
---|
289 | | - __u8 reserved218[1000]; /* 0x0218 */ |
---|
| 357 | + __u8 reserved218[360]; /* 0x0218 */ |
---|
| 358 | + __u64 pv_grregs[16]; /* 0x0380 */ |
---|
| 359 | + __u8 reserved400[512]; /* 0x0400 */ |
---|
290 | 360 | struct kvm_s390_itdb itdb; /* 0x0600 */ |
---|
291 | 361 | __u8 reserved700[2304]; /* 0x0700 */ |
---|
292 | 362 | }; |
---|
.. | .. |
---|
304 | 374 | u64 halt_successful_poll; |
---|
305 | 375 | u64 halt_attempted_poll; |
---|
306 | 376 | u64 halt_poll_invalid; |
---|
| 377 | + u64 halt_no_poll_steal; |
---|
307 | 378 | u64 halt_wakeup; |
---|
| 379 | + u64 halt_poll_success_ns; |
---|
| 380 | + u64 halt_poll_fail_ns; |
---|
308 | 381 | u64 instruction_lctl; |
---|
309 | 382 | u64 instruction_lctlg; |
---|
310 | 383 | u64 instruction_stctl; |
---|
.. | .. |
---|
381 | 454 | u64 diagnose_10; |
---|
382 | 455 | u64 diagnose_44; |
---|
383 | 456 | u64 diagnose_9c; |
---|
| 457 | + u64 diagnose_9c_ignored; |
---|
384 | 458 | u64 diagnose_258; |
---|
385 | 459 | u64 diagnose_308; |
---|
386 | 460 | u64 diagnose_500; |
---|
.. | .. |
---|
459 | 533 | IRQ_PEND_PFAULT_INIT, |
---|
460 | 534 | IRQ_PEND_EXT_HOST, |
---|
461 | 535 | IRQ_PEND_EXT_SERVICE, |
---|
| 536 | + IRQ_PEND_EXT_SERVICE_EV, |
---|
462 | 537 | IRQ_PEND_EXT_TIMING, |
---|
463 | 538 | IRQ_PEND_EXT_CPU_TIMER, |
---|
464 | 539 | IRQ_PEND_EXT_CLOCK_COMP, |
---|
.. | .. |
---|
503 | 578 | (1UL << IRQ_PEND_EXT_TIMING) | \ |
---|
504 | 579 | (1UL << IRQ_PEND_EXT_HOST) | \ |
---|
505 | 580 | (1UL << IRQ_PEND_EXT_SERVICE) | \ |
---|
| 581 | + (1UL << IRQ_PEND_EXT_SERVICE_EV) | \ |
---|
506 | 582 | (1UL << IRQ_PEND_VIRTIO) | \ |
---|
507 | 583 | (1UL << IRQ_PEND_PFAULT_INIT) | \ |
---|
508 | 584 | (1UL << IRQ_PEND_PFAULT_DONE)) |
---|
.. | .. |
---|
518 | 594 | |
---|
519 | 595 | #define IRQ_PEND_MCHK_MASK ((1UL << IRQ_PEND_MCHK_REP) | \ |
---|
520 | 596 | (1UL << IRQ_PEND_MCHK_EX)) |
---|
| 597 | + |
---|
| 598 | +#define IRQ_PEND_EXT_II_MASK ((1UL << IRQ_PEND_EXT_CPU_TIMER) | \ |
---|
| 599 | + (1UL << IRQ_PEND_EXT_CLOCK_COMP) | \ |
---|
| 600 | + (1UL << IRQ_PEND_EXT_EMERGENCY) | \ |
---|
| 601 | + (1UL << IRQ_PEND_EXT_EXTERNAL) | \ |
---|
| 602 | + (1UL << IRQ_PEND_EXT_SERVICE) | \ |
---|
| 603 | + (1UL << IRQ_PEND_EXT_SERVICE_EV)) |
---|
521 | 604 | |
---|
522 | 605 | struct kvm_s390_interrupt_info { |
---|
523 | 606 | struct list_head list; |
---|
.. | .. |
---|
577 | 660 | |
---|
578 | 661 | struct kvm_s390_float_interrupt { |
---|
579 | 662 | unsigned long pending_irqs; |
---|
| 663 | + unsigned long masked_irqs; |
---|
580 | 664 | spinlock_t lock; |
---|
581 | 665 | struct list_head lists[FIRQ_LIST_COUNT]; |
---|
582 | 666 | int counters[FIRQ_MAX_COUNT]; |
---|
583 | 667 | struct kvm_s390_mchk_info mchk; |
---|
584 | 668 | struct kvm_s390_ext_info srv_signal; |
---|
585 | 669 | int next_rr_cpu; |
---|
586 | | - unsigned long idle_mask[BITS_TO_LONGS(KVM_MAX_VCPUS)]; |
---|
587 | 670 | struct mutex ais_lock; |
---|
588 | 671 | u8 simm; |
---|
589 | 672 | u8 nimm; |
---|
.. | .. |
---|
629 | 712 | unsigned long last_bp; |
---|
630 | 713 | }; |
---|
631 | 714 | |
---|
| 715 | +struct kvm_s390_pv_vcpu { |
---|
| 716 | + u64 handle; |
---|
| 717 | + unsigned long stor_base; |
---|
| 718 | +}; |
---|
| 719 | + |
---|
632 | 720 | struct kvm_vcpu_arch { |
---|
633 | 721 | struct kvm_s390_sie_block *sie_block; |
---|
634 | 722 | /* if vsie is active, currently executed shadow sie control block */ |
---|
.. | .. |
---|
657 | 745 | __u64 cputm_start; |
---|
658 | 746 | bool gs_enabled; |
---|
659 | 747 | bool skey_enabled; |
---|
| 748 | + struct kvm_s390_pv_vcpu pv; |
---|
| 749 | + union diag318_info diag318_info; |
---|
660 | 750 | }; |
---|
661 | 751 | |
---|
662 | 752 | struct kvm_vm_stat { |
---|
.. | .. |
---|
685 | 775 | bool masked; |
---|
686 | 776 | bool swap; |
---|
687 | 777 | bool suppressible; |
---|
688 | | - struct rw_semaphore maps_lock; |
---|
689 | | - struct list_head maps; |
---|
690 | | - atomic_t nr_maps; |
---|
691 | 778 | }; |
---|
692 | 779 | |
---|
693 | 780 | #define MAX_S390_IO_ADAPTERS ((MAX_ISC + 1) * 8) |
---|
.. | .. |
---|
704 | 791 | struct kvm_s390_cpu_model { |
---|
705 | 792 | /* facility mask supported by kvm & hosting machine */ |
---|
706 | 793 | __u64 fac_mask[S390_ARCH_FAC_LIST_SIZE_U64]; |
---|
| 794 | + struct kvm_s390_vm_cpu_subfunc subfuncs; |
---|
707 | 795 | /* facility list requested by guest (in dma page) */ |
---|
708 | 796 | __u64 *fac_list; |
---|
709 | 797 | u64 cpuid; |
---|
710 | 798 | unsigned short ibc; |
---|
711 | 799 | }; |
---|
712 | 800 | |
---|
| 801 | +struct kvm_s390_module_hook { |
---|
| 802 | + int (*hook)(struct kvm_vcpu *vcpu); |
---|
| 803 | + struct module *owner; |
---|
| 804 | +}; |
---|
| 805 | + |
---|
713 | 806 | struct kvm_s390_crypto { |
---|
714 | 807 | struct kvm_s390_crypto_cb *crycb; |
---|
| 808 | + struct kvm_s390_module_hook *pqap_hook; |
---|
715 | 809 | __u32 crycbd; |
---|
716 | 810 | __u8 aes_kw; |
---|
717 | 811 | __u8 dea_kw; |
---|
| 812 | + __u8 apie; |
---|
718 | 813 | }; |
---|
719 | 814 | |
---|
720 | 815 | #define APCB0_MASK_SIZE 1 |
---|
.. | .. |
---|
773 | 868 | u8 reserved03[11]; |
---|
774 | 869 | u32 airq_count; |
---|
775 | 870 | } g1; |
---|
| 871 | + struct { |
---|
| 872 | + u64 word[4]; |
---|
| 873 | + } u64; |
---|
776 | 874 | }; |
---|
| 875 | +}; |
---|
| 876 | + |
---|
| 877 | +struct kvm_s390_gib { |
---|
| 878 | + u32 alert_list_origin; |
---|
| 879 | + u32 reserved01; |
---|
| 880 | + u8:5; |
---|
| 881 | + u8 nisc:3; |
---|
| 882 | + u8 reserved03[3]; |
---|
| 883 | + u32 reserved04[5]; |
---|
777 | 884 | }; |
---|
778 | 885 | |
---|
779 | 886 | /* |
---|
.. | .. |
---|
784 | 891 | __u64 fac_list[S390_ARCH_FAC_LIST_SIZE_U64]; /* 0x0000 */ |
---|
785 | 892 | struct kvm_s390_crypto_cb crycb; /* 0x0800 */ |
---|
786 | 893 | struct kvm_s390_gisa gisa; /* 0x0900 */ |
---|
787 | | - u8 reserved920[0x1000 - 0x920]; /* 0x0920 */ |
---|
| 894 | + struct kvm *kvm; /* 0x0920 */ |
---|
| 895 | + u8 reserved928[0x1000 - 0x928]; /* 0x0928 */ |
---|
788 | 896 | }; |
---|
789 | 897 | |
---|
790 | 898 | struct kvm_s390_vsie { |
---|
.. | .. |
---|
793 | 901 | int page_count; |
---|
794 | 902 | int next; |
---|
795 | 903 | struct page *pages[KVM_MAX_VCPUS]; |
---|
| 904 | +}; |
---|
| 905 | + |
---|
| 906 | +struct kvm_s390_gisa_iam { |
---|
| 907 | + u8 mask; |
---|
| 908 | + spinlock_t ref_lock; |
---|
| 909 | + u32 ref_count[MAX_ISC + 1]; |
---|
| 910 | +}; |
---|
| 911 | + |
---|
| 912 | +struct kvm_s390_gisa_interrupt { |
---|
| 913 | + struct kvm_s390_gisa *origin; |
---|
| 914 | + struct kvm_s390_gisa_iam alert; |
---|
| 915 | + struct hrtimer timer; |
---|
| 916 | + u64 expires; |
---|
| 917 | + DECLARE_BITMAP(kicked_mask, KVM_MAX_VCPUS); |
---|
| 918 | +}; |
---|
| 919 | + |
---|
| 920 | +struct kvm_s390_pv { |
---|
| 921 | + u64 handle; |
---|
| 922 | + u64 guest_len; |
---|
| 923 | + unsigned long stor_base; |
---|
| 924 | + void *stor_var; |
---|
796 | 925 | }; |
---|
797 | 926 | |
---|
798 | 927 | struct kvm_arch{ |
---|
.. | .. |
---|
828 | 957 | atomic64_t cmma_dirty_pages; |
---|
829 | 958 | /* subset of available cpu features enabled by user space */ |
---|
830 | 959 | DECLARE_BITMAP(cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS); |
---|
831 | | - struct kvm_s390_gisa *gisa; |
---|
| 960 | + /* indexed by vcpu_idx */ |
---|
| 961 | + DECLARE_BITMAP(idle_mask, KVM_MAX_VCPUS); |
---|
| 962 | + struct kvm_s390_gisa_interrupt gisa_int; |
---|
| 963 | + struct kvm_s390_pv pv; |
---|
832 | 964 | }; |
---|
833 | 965 | |
---|
834 | 966 | #define KVM_HVA_ERR_BAD (-1UL) |
---|
.. | .. |
---|
844 | 976 | unsigned long pfault_token; |
---|
845 | 977 | }; |
---|
846 | 978 | |
---|
847 | | -bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu); |
---|
| 979 | +bool kvm_arch_can_dequeue_async_page_present(struct kvm_vcpu *vcpu); |
---|
848 | 980 | |
---|
849 | 981 | void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, |
---|
850 | 982 | struct kvm_async_pf *work); |
---|
851 | 983 | |
---|
852 | | -void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, |
---|
| 984 | +bool kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, |
---|
853 | 985 | struct kvm_async_pf *work); |
---|
854 | 986 | |
---|
855 | 987 | void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, |
---|
856 | 988 | struct kvm_async_pf *work); |
---|
857 | 989 | |
---|
| 990 | +static inline void kvm_arch_async_page_present_queued(struct kvm_vcpu *vcpu) {} |
---|
| 991 | + |
---|
| 992 | +void kvm_arch_crypto_clear_masks(struct kvm *kvm); |
---|
| 993 | +void kvm_arch_crypto_set_masks(struct kvm *kvm, unsigned long *apm, |
---|
| 994 | + unsigned long *aqm, unsigned long *adm); |
---|
| 995 | + |
---|
858 | 996 | extern int sie64a(struct kvm_s390_sie_block *, u64 *); |
---|
859 | 997 | extern char sie_exit; |
---|
860 | 998 | |
---|
| 999 | +extern int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc); |
---|
| 1000 | +extern int kvm_s390_gisc_unregister(struct kvm *kvm, u32 gisc); |
---|
| 1001 | + |
---|
861 | 1002 | static inline void kvm_arch_hardware_disable(void) {} |
---|
862 | | -static inline void kvm_arch_check_processor_compat(void *rtn) {} |
---|
863 | 1003 | static inline void kvm_arch_sync_events(struct kvm *kvm) {} |
---|
864 | | -static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {} |
---|
865 | 1004 | static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} |
---|
866 | 1005 | static inline void kvm_arch_free_memslot(struct kvm *kvm, |
---|
867 | | - struct kvm_memory_slot *free, struct kvm_memory_slot *dont) {} |
---|
| 1006 | + struct kvm_memory_slot *slot) {} |
---|
868 | 1007 | static inline void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen) {} |
---|
869 | 1008 | static inline void kvm_arch_flush_shadow_all(struct kvm *kvm) {} |
---|
870 | 1009 | static inline void kvm_arch_flush_shadow_memslot(struct kvm *kvm, |
---|