1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * definition for kernel virtual machines on s390 4 * 5 * Copyright IBM Corp. 2008, 2018 6 * 7 * Author(s): Carsten Otte <cotte@de.ibm.com> 8 */ 9 10 11 #ifndef ASM_KVM_HOST_S390_H 12 #define ASM_KVM_HOST_S390_H 13 14 #include <linux/types.h> 15 #include <linux/hrtimer.h> 16 #include <linux/interrupt.h> 17 #include <linux/kvm_types.h> 18 #include <linux/kvm.h> 19 #include <linux/seqlock.h> 20 #include <linux/module.h> 21 #include <linux/pci.h> 22 #include <linux/mmu_notifier.h> 23 #include <asm/kvm_host_types.h> 24 #include <asm/debug.h> 25 #include <asm/cpu.h> 26 #include <asm/fpu.h> 27 #include <asm/isc.h> 28 #include <asm/guarded_storage.h> 29 30 #define KVM_HAVE_MMU_RWLOCK 31 #define KVM_MAX_VCPUS 255 32 33 #define KVM_INTERNAL_MEM_SLOTS 1 34 35 #define KVM_S390_MANAGES_S390_GUEST 1 36 37 /* 38 * These seem to be used for allocating ->chip in the routing table, which we 39 * don't use. 1 is as small as we can get to reduce the needed memory. If we 40 * need to look at ->chip later on, we'll need to revisit this. 41 */ 42 #define KVM_NR_IRQCHIPS 1 43 #define KVM_IRQCHIP_NUM_PINS 1 44 #define KVM_HALT_POLL_NS_DEFAULT 50000 45 46 /* s390-specific vcpu->requests bit members */ 47 #define KVM_REQ_ENABLE_IBS KVM_ARCH_REQ(0) 48 #define KVM_REQ_DISABLE_IBS KVM_ARCH_REQ(1) 49 #define KVM_REQ_ICPT_OPEREXC KVM_ARCH_REQ(2) 50 #define KVM_REQ_START_MIGRATION KVM_ARCH_REQ(3) 51 #define KVM_REQ_STOP_MIGRATION KVM_ARCH_REQ(4) 52 #define KVM_REQ_VSIE_RESTART KVM_ARCH_REQ(5) 53 #define KVM_REQ_REFRESH_GUEST_PREFIX \ 54 KVM_ARCH_REQ_FLAGS(6, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP) 55 56 struct kvm_vcpu_stat { 57 struct kvm_vcpu_stat_generic generic; 58 u64 exit_userspace; 59 u64 exit_null; 60 u64 exit_external_request; 61 u64 exit_io_request; 62 u64 exit_external_interrupt; 63 u64 exit_stop_request; 64 u64 exit_validity; 65 u64 exit_instruction; 66 u64 exit_pei; 67 u64 halt_no_poll_steal; 68 u64 instruction_lctl; 69 u64 instruction_lctlg; 70 u64 instruction_stctl; 71 u64 instruction_stctg; 72 u64 exit_program_interruption; 73 u64 exit_instr_and_program; 74 u64 exit_operation_exception; 75 u64 deliver_ckc; 76 u64 deliver_cputm; 77 u64 deliver_external_call; 78 u64 deliver_emergency_signal; 79 u64 deliver_service_signal; 80 u64 deliver_virtio; 81 u64 deliver_stop_signal; 82 u64 deliver_prefix_signal; 83 u64 deliver_restart_signal; 84 u64 deliver_program; 85 u64 deliver_io; 86 u64 deliver_machine_check; 87 u64 exit_wait_state; 88 u64 inject_ckc; 89 u64 inject_cputm; 90 u64 inject_external_call; 91 u64 inject_emergency_signal; 92 u64 inject_mchk; 93 u64 inject_pfault_init; 94 u64 inject_program; 95 u64 inject_restart; 96 u64 inject_set_prefix; 97 u64 inject_stop_signal; 98 u64 instruction_epsw; 99 u64 instruction_gs; 100 u64 instruction_io_other; 101 u64 instruction_lpsw; 102 u64 instruction_lpswe; 103 u64 instruction_lpswey; 104 u64 instruction_pfmf; 105 u64 instruction_ptff; 106 u64 instruction_sck; 107 u64 instruction_sckpf; 108 u64 instruction_stidp; 109 u64 instruction_spx; 110 u64 instruction_stpx; 111 u64 instruction_stap; 112 u64 instruction_iske; 113 u64 instruction_ri; 114 u64 instruction_rrbe; 115 u64 instruction_sske; 116 u64 instruction_ipte_interlock; 117 u64 instruction_stsi; 118 u64 instruction_stfl; 119 u64 instruction_tb; 120 u64 instruction_tpi; 121 u64 instruction_tprot; 122 u64 instruction_tsch; 123 u64 instruction_sie; 124 u64 instruction_essa; 125 u64 instruction_sthyi; 126 u64 instruction_sigp_sense; 127 u64 instruction_sigp_sense_running; 128 u64 instruction_sigp_external_call; 129 u64 instruction_sigp_emergency; 130 u64 instruction_sigp_cond_emergency; 131 u64 instruction_sigp_start; 132 u64 instruction_sigp_stop; 133 u64 instruction_sigp_stop_store_status; 134 u64 instruction_sigp_store_status; 135 u64 instruction_sigp_store_adtl_status; 136 u64 instruction_sigp_arch; 137 u64 instruction_sigp_prefix; 138 u64 instruction_sigp_restart; 139 u64 instruction_sigp_init_cpu_reset; 140 u64 instruction_sigp_cpu_reset; 141 u64 instruction_sigp_unknown; 142 u64 instruction_diagnose_10; 143 u64 instruction_diagnose_44; 144 u64 instruction_diagnose_9c; 145 u64 diag_9c_ignored; 146 u64 diag_9c_forward; 147 u64 instruction_diagnose_258; 148 u64 instruction_diagnose_308; 149 u64 instruction_diagnose_500; 150 u64 instruction_diagnose_other; 151 u64 pfault_sync; 152 u64 signal_exits; 153 }; 154 155 /* irq types in ascend order of priorities */ 156 enum irq_types { 157 IRQ_PEND_SET_PREFIX = 0, 158 IRQ_PEND_RESTART, 159 IRQ_PEND_SIGP_STOP, 160 IRQ_PEND_IO_ISC_7, 161 IRQ_PEND_IO_ISC_6, 162 IRQ_PEND_IO_ISC_5, 163 IRQ_PEND_IO_ISC_4, 164 IRQ_PEND_IO_ISC_3, 165 IRQ_PEND_IO_ISC_2, 166 IRQ_PEND_IO_ISC_1, 167 IRQ_PEND_IO_ISC_0, 168 IRQ_PEND_VIRTIO, 169 IRQ_PEND_PFAULT_DONE, 170 IRQ_PEND_PFAULT_INIT, 171 IRQ_PEND_EXT_HOST, 172 IRQ_PEND_EXT_SERVICE, 173 IRQ_PEND_EXT_SERVICE_EV, 174 IRQ_PEND_EXT_TIMING, 175 IRQ_PEND_EXT_CPU_TIMER, 176 IRQ_PEND_EXT_CLOCK_COMP, 177 IRQ_PEND_EXT_EXTERNAL, 178 IRQ_PEND_EXT_EMERGENCY, 179 IRQ_PEND_EXT_MALFUNC, 180 IRQ_PEND_EXT_IRQ_KEY, 181 IRQ_PEND_MCHK_REP, 182 IRQ_PEND_PROG, 183 IRQ_PEND_SVC, 184 IRQ_PEND_MCHK_EX, 185 IRQ_PEND_COUNT 186 }; 187 188 /* We have 2M for virtio device descriptor pages. Smallest amount of 189 * memory per page is 24 bytes (1 queue), so (2048*1024) / 24 = 87381 190 */ 191 #define KVM_S390_MAX_VIRTIO_IRQS 87381 192 193 /* 194 * Repressible (non-floating) machine check interrupts 195 * subclass bits in MCIC 196 */ 197 #define MCHK_EXTD_BIT 58 198 #define MCHK_DEGR_BIT 56 199 #define MCHK_WARN_BIT 55 200 #define MCHK_REP_MASK ((1UL << MCHK_DEGR_BIT) | \ 201 (1UL << MCHK_EXTD_BIT) | \ 202 (1UL << MCHK_WARN_BIT)) 203 204 /* Exigent machine check interrupts subclass bits in MCIC */ 205 #define MCHK_SD_BIT 63 206 #define MCHK_PD_BIT 62 207 #define MCHK_EX_MASK ((1UL << MCHK_SD_BIT) | (1UL << MCHK_PD_BIT)) 208 209 #define IRQ_PEND_EXT_MASK ((1UL << IRQ_PEND_EXT_IRQ_KEY) | \ 210 (1UL << IRQ_PEND_EXT_CLOCK_COMP) | \ 211 (1UL << IRQ_PEND_EXT_CPU_TIMER) | \ 212 (1UL << IRQ_PEND_EXT_MALFUNC) | \ 213 (1UL << IRQ_PEND_EXT_EMERGENCY) | \ 214 (1UL << IRQ_PEND_EXT_EXTERNAL) | \ 215 (1UL << IRQ_PEND_EXT_TIMING) | \ 216 (1UL << IRQ_PEND_EXT_HOST) | \ 217 (1UL << IRQ_PEND_EXT_SERVICE) | \ 218 (1UL << IRQ_PEND_EXT_SERVICE_EV) | \ 219 (1UL << IRQ_PEND_VIRTIO) | \ 220 (1UL << IRQ_PEND_PFAULT_INIT) | \ 221 (1UL << IRQ_PEND_PFAULT_DONE)) 222 223 #define IRQ_PEND_IO_MASK ((1UL << IRQ_PEND_IO_ISC_0) | \ 224 (1UL << IRQ_PEND_IO_ISC_1) | \ 225 (1UL << IRQ_PEND_IO_ISC_2) | \ 226 (1UL << IRQ_PEND_IO_ISC_3) | \ 227 (1UL << IRQ_PEND_IO_ISC_4) | \ 228 (1UL << IRQ_PEND_IO_ISC_5) | \ 229 (1UL << IRQ_PEND_IO_ISC_6) | \ 230 (1UL << IRQ_PEND_IO_ISC_7)) 231 232 #define IRQ_PEND_MCHK_MASK ((1UL << IRQ_PEND_MCHK_REP) | \ 233 (1UL << IRQ_PEND_MCHK_EX)) 234 235 #define IRQ_PEND_EXT_II_MASK ((1UL << IRQ_PEND_EXT_CPU_TIMER) | \ 236 (1UL << IRQ_PEND_EXT_CLOCK_COMP) | \ 237 (1UL << IRQ_PEND_EXT_EMERGENCY) | \ 238 (1UL << IRQ_PEND_EXT_EXTERNAL) | \ 239 (1UL << IRQ_PEND_EXT_SERVICE) | \ 240 (1UL << IRQ_PEND_EXT_SERVICE_EV)) 241 242 struct kvm_s390_interrupt_info { 243 struct list_head list; 244 u64 type; 245 union { 246 struct kvm_s390_io_info io; 247 struct kvm_s390_ext_info ext; 248 struct kvm_s390_pgm_info pgm; 249 struct kvm_s390_emerg_info emerg; 250 struct kvm_s390_extcall_info extcall; 251 struct kvm_s390_prefix_info prefix; 252 struct kvm_s390_stop_info stop; 253 struct kvm_s390_mchk_info mchk; 254 }; 255 }; 256 257 struct kvm_s390_irq_payload { 258 struct kvm_s390_io_info io; 259 struct kvm_s390_ext_info ext; 260 struct kvm_s390_pgm_info pgm; 261 struct kvm_s390_emerg_info emerg; 262 struct kvm_s390_extcall_info extcall; 263 struct kvm_s390_prefix_info prefix; 264 struct kvm_s390_stop_info stop; 265 struct kvm_s390_mchk_info mchk; 266 }; 267 268 struct kvm_s390_local_interrupt { 269 spinlock_t lock; 270 DECLARE_BITMAP(sigp_emerg_pending, KVM_MAX_VCPUS); 271 struct kvm_s390_irq_payload irq; 272 unsigned long pending_irqs; 273 }; 274 275 #define FIRQ_LIST_IO_ISC_0 0 276 #define FIRQ_LIST_IO_ISC_1 1 277 #define FIRQ_LIST_IO_ISC_2 2 278 #define FIRQ_LIST_IO_ISC_3 3 279 #define FIRQ_LIST_IO_ISC_4 4 280 #define FIRQ_LIST_IO_ISC_5 5 281 #define FIRQ_LIST_IO_ISC_6 6 282 #define FIRQ_LIST_IO_ISC_7 7 283 #define FIRQ_LIST_PFAULT 8 284 #define FIRQ_LIST_VIRTIO 9 285 #define FIRQ_LIST_COUNT 10 286 #define FIRQ_CNTR_IO 0 287 #define FIRQ_CNTR_SERVICE 1 288 #define FIRQ_CNTR_VIRTIO 2 289 #define FIRQ_CNTR_PFAULT 3 290 #define FIRQ_MAX_COUNT 4 291 292 /* mask the AIS mode for a given ISC */ 293 #define AIS_MODE_MASK(isc) (0x80 >> isc) 294 295 #define KVM_S390_AIS_MODE_ALL 0 296 #define KVM_S390_AIS_MODE_SINGLE 1 297 298 struct kvm_s390_float_interrupt { 299 unsigned long pending_irqs; 300 unsigned long masked_irqs; 301 spinlock_t lock; 302 struct list_head lists[FIRQ_LIST_COUNT]; 303 int counters[FIRQ_MAX_COUNT]; 304 struct kvm_s390_mchk_info mchk; 305 struct kvm_s390_ext_info srv_signal; 306 int last_sleep_cpu; 307 spinlock_t ais_lock; 308 u8 simm; 309 u8 nimm; 310 }; 311 312 struct kvm_hw_wp_info_arch { 313 unsigned long addr; 314 unsigned long phys_addr; 315 int len; 316 char *old_data; 317 }; 318 319 struct kvm_hw_bp_info_arch { 320 unsigned long addr; 321 int len; 322 }; 323 324 /* 325 * Only the upper 16 bits of kvm_guest_debug->control are arch specific. 326 * Further KVM_GUESTDBG flags which an be used from userspace can be found in 327 * arch/s390/include/uapi/asm/kvm.h 328 */ 329 #define KVM_GUESTDBG_EXIT_PENDING 0x10000000 330 331 #define guestdbg_enabled(vcpu) \ 332 (vcpu->guest_debug & KVM_GUESTDBG_ENABLE) 333 #define guestdbg_sstep_enabled(vcpu) \ 334 (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) 335 #define guestdbg_hw_bp_enabled(vcpu) \ 336 (vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP) 337 #define guestdbg_exit_pending(vcpu) (guestdbg_enabled(vcpu) && \ 338 (vcpu->guest_debug & KVM_GUESTDBG_EXIT_PENDING)) 339 340 #define KVM_GUESTDBG_VALID_MASK \ 341 (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP |\ 342 KVM_GUESTDBG_USE_HW_BP | KVM_GUESTDBG_EXIT_PENDING) 343 344 struct kvm_guestdbg_info_arch { 345 unsigned long cr0; 346 unsigned long cr9; 347 unsigned long cr10; 348 unsigned long cr11; 349 struct kvm_hw_bp_info_arch *hw_bp_info; 350 struct kvm_hw_wp_info_arch *hw_wp_info; 351 int nr_hw_bp; 352 int nr_hw_wp; 353 unsigned long last_bp; 354 }; 355 356 struct kvm_s390_pv_vcpu { 357 u64 handle; 358 unsigned long stor_base; 359 }; 360 361 struct kvm_vcpu_arch { 362 struct kvm_s390_sie_block *sie_block; 363 /* if vsie is active, currently executed shadow sie control block */ 364 struct kvm_s390_sie_block *vsie_block; 365 unsigned int host_acrs[NUM_ACRS]; 366 struct gs_cb *host_gscb; 367 struct kvm_s390_local_interrupt local_int; 368 struct hrtimer ckc_timer; 369 struct kvm_s390_pgm_info pgm; 370 struct gmap *gmap; 371 struct kvm_guestdbg_info_arch guestdbg; 372 unsigned long pfault_token; 373 unsigned long pfault_select; 374 unsigned long pfault_compare; 375 bool cputm_enabled; 376 /* 377 * The seqcount protects updates to cputm_start and sie_block.cputm, 378 * this way we can have non-blocking reads with consistent values. 379 * Only the owning VCPU thread (vcpu->cpu) is allowed to change these 380 * values and to start/stop/enable/disable cpu timer accounting. 381 */ 382 seqcount_t cputm_seqcount; 383 __u64 cputm_start; 384 bool gs_enabled; 385 bool skey_enabled; 386 /* Indicator if the access registers have been loaded from guest */ 387 bool acrs_loaded; 388 bool initialized; 389 struct kvm_s390_pv_vcpu pv; 390 union diag318_info diag318_info; 391 struct kvm_s390_mmu_cache *mc; 392 }; 393 394 struct kvm_vm_stat { 395 struct kvm_vm_stat_generic generic; 396 u64 inject_io; 397 u64 io_390_adapter_map; 398 u64 io_390_adapter_unmap; 399 u64 io_390_inatomic; 400 u64 io_flic_inject_airq; 401 u64 io_set_adapter_int; 402 u64 io_390_inatomic_no_inject; 403 u64 inject_float_mchk; 404 u64 inject_pfault_done; 405 u64 inject_service_signal; 406 u64 inject_virtio; 407 u64 aen_forward; 408 u64 gmap_shadow_create; 409 u64 gmap_shadow_reuse; 410 u64 gmap_shadow_r1_entry; 411 u64 gmap_shadow_r2_entry; 412 u64 gmap_shadow_r3_entry; 413 u64 gmap_shadow_sg_entry; 414 u64 gmap_shadow_pg_entry; 415 }; 416 417 struct kvm_arch_memory_slot { 418 }; 419 420 struct s390_map_info { 421 struct list_head list; 422 __u64 guest_addr; 423 __u64 addr; 424 struct page *page; 425 /* 426 * True if the page is long-term pinned. False if long-term pinning 427 * failed and this entry exists only to preserve MAP/UNMAP symmetry. 428 */ 429 bool pinned; 430 }; 431 432 struct s390_io_adapter { 433 unsigned int id; 434 int isc; 435 bool maskable; 436 bool masked; 437 bool swap; 438 bool suppressible; 439 spinlock_t maps_lock; 440 struct list_head maps; 441 unsigned int nr_maps; 442 }; 443 444 #define MAX_S390_IO_ADAPTERS ((MAX_ISC + 1) * 8) 445 #define MAX_S390_ADAPTER_MAPS 256 446 447 /* maximum size of facilities and facility mask is 2k bytes */ 448 #define S390_ARCH_FAC_LIST_SIZE_BYTE (1<<11) 449 #define S390_ARCH_FAC_LIST_SIZE_U64 \ 450 (S390_ARCH_FAC_LIST_SIZE_BYTE / sizeof(u64)) 451 #define S390_ARCH_FAC_MASK_SIZE_BYTE S390_ARCH_FAC_LIST_SIZE_BYTE 452 #define S390_ARCH_FAC_MASK_SIZE_U64 \ 453 (S390_ARCH_FAC_MASK_SIZE_BYTE / sizeof(u64)) 454 455 struct kvm_s390_cpu_model { 456 /* facility mask supported by kvm & hosting machine */ 457 __u64 fac_mask[S390_ARCH_FAC_MASK_SIZE_U64]; 458 struct kvm_s390_vm_cpu_subfunc subfuncs; 459 /* facility list requested by guest (in dma page) */ 460 __u64 *fac_list; 461 u64 cpuid; 462 unsigned short ibc; 463 /* subset of available UV-features for pv-guests enabled by user space */ 464 struct kvm_s390_vm_cpu_uv_feat uv_feat_guest; 465 }; 466 467 #define S390_ARCH_FAC_FORMAT_2 2 468 struct kvm_s390_flcb2 { 469 union { 470 struct { 471 u8 reserved0[7]; 472 u8 length; 473 }; 474 u64 header_val; 475 }; 476 u64 facilities[S390_ARCH_FAC_LIST_SIZE_U64]; 477 }; 478 479 typedef int (*crypto_hook)(struct kvm_vcpu *vcpu); 480 481 struct kvm_s390_crypto { 482 struct kvm_s390_crypto_cb *crycb; 483 struct rw_semaphore pqap_hook_rwsem; 484 crypto_hook *pqap_hook; 485 __u32 crycbd; 486 __u8 aes_kw; 487 __u8 dea_kw; 488 __u8 apie; 489 }; 490 491 #define APCB0_MASK_SIZE 1 492 struct kvm_s390_apcb0 { 493 __u64 apm[APCB0_MASK_SIZE]; /* 0x0000 */ 494 __u64 aqm[APCB0_MASK_SIZE]; /* 0x0008 */ 495 __u64 adm[APCB0_MASK_SIZE]; /* 0x0010 */ 496 __u64 reserved18; /* 0x0018 */ 497 }; 498 499 #define APCB1_MASK_SIZE 4 500 struct kvm_s390_apcb1 { 501 __u64 apm[APCB1_MASK_SIZE]; /* 0x0000 */ 502 __u64 aqm[APCB1_MASK_SIZE]; /* 0x0020 */ 503 __u64 adm[APCB1_MASK_SIZE]; /* 0x0040 */ 504 __u64 reserved60[4]; /* 0x0060 */ 505 }; 506 507 struct kvm_s390_crypto_cb { 508 struct kvm_s390_apcb0 apcb0; /* 0x0000 */ 509 __u8 reserved20[0x0048 - 0x0020]; /* 0x0020 */ 510 __u8 dea_wrapping_key_mask[24]; /* 0x0048 */ 511 __u8 aes_wrapping_key_mask[32]; /* 0x0060 */ 512 struct kvm_s390_apcb1 apcb1; /* 0x0080 */ 513 }; 514 515 struct kvm_s390_gisa { 516 union { 517 struct { /* common to all formats */ 518 u32 next_alert; 519 u8 ipm; 520 u8 reserved01[2]; 521 u8 iam; 522 }; 523 struct { /* format 0 */ 524 u32 next_alert; 525 u8 ipm; 526 u8 reserved01; 527 u8 : 6; 528 u8 g : 1; 529 u8 c : 1; 530 u8 iam; 531 u8 reserved02[4]; 532 u32 airq_count; 533 } g0; 534 struct { /* format 1 */ 535 u32 next_alert; 536 u8 ipm; 537 u8 simm; 538 u8 nimm; 539 u8 iam; 540 u8 aism[8]; 541 u8 : 6; 542 u8 g : 1; 543 u8 c : 1; 544 u8 reserved03[11]; 545 u32 airq_count; 546 } g1; 547 struct { 548 u64 word[4]; 549 } u64; 550 }; 551 }; 552 553 struct kvm_s390_gib { 554 u32 alert_list_origin; 555 u32 reserved01; 556 u8:5; 557 u8 nisc:3; 558 u8 reserved03[3]; 559 u32 reserved04[5]; 560 }; 561 562 /* 563 * sie_page2 has to be allocated as DMA because fac_list, crycb and 564 * gisa need 31bit addresses in the sie control block. 565 */ 566 struct sie_page2 { 567 __u64 fac_list[S390_ARCH_FAC_LIST_SIZE_U64]; /* 0x0000 */ 568 struct kvm_s390_crypto_cb crycb; /* 0x0800 */ 569 struct kvm_s390_gisa gisa; /* 0x0900 */ 570 struct kvm *kvm; /* 0x0920 */ 571 u8 reserved928[0x1000 - 0x928]; /* 0x0928 */ 572 }; 573 574 struct vsie_page; 575 576 struct kvm_s390_vsie { 577 struct mutex mutex; 578 struct radix_tree_root addr_to_page; 579 int page_count; 580 int next; 581 struct vsie_page *pages[KVM_MAX_VCPUS]; 582 }; 583 584 struct kvm_s390_gisa_iam { 585 u8 mask; 586 spinlock_t ref_lock; 587 u32 ref_count[MAX_ISC + 1]; 588 }; 589 590 struct kvm_s390_gisa_interrupt { 591 struct kvm_s390_gisa *origin; 592 struct kvm_s390_gisa_iam alert; 593 struct hrtimer timer; 594 u64 expires; 595 DECLARE_BITMAP(kicked_mask, KVM_MAX_VCPUS); 596 }; 597 598 struct kvm_s390_pv { 599 u64 handle; 600 u64 guest_len; 601 unsigned long stor_base; 602 void *stor_var; 603 bool dumping; 604 void *set_aside; 605 struct list_head need_cleanup; 606 struct mmu_notifier mmu_notifier; 607 /* Protects against concurrent import-like operations */ 608 struct mutex import_lock; 609 }; 610 611 struct kvm_s390_mmu_cache; 612 613 struct kvm_arch { 614 struct esca_block *sca; 615 debug_info_t *dbf; 616 struct kvm_s390_float_interrupt float_int; 617 struct kvm_device *flic; 618 struct gmap *gmap; 619 unsigned long mem_limit; 620 int css_support; 621 int use_irqchip; 622 int use_cmma; 623 int use_pfmfi; 624 int use_skf; 625 int use_zpci_interp; 626 int user_cpu_state_ctrl; 627 int user_sigp; 628 int user_stsi; 629 int user_instr0; 630 int user_operexec; 631 int allow_vsie_esamode; 632 struct s390_io_adapter *adapters[MAX_S390_IO_ADAPTERS]; 633 wait_queue_head_t ipte_wq; 634 int ipte_lock_count; 635 struct mutex ipte_mutex; 636 spinlock_t start_stop_lock; 637 struct sie_page2 *sie_page2; 638 struct kvm_s390_cpu_model model; 639 struct kvm_s390_crypto crypto; 640 struct kvm_s390_vsie vsie; 641 u8 epdx; 642 u64 epoch; 643 int migration_mode; 644 atomic64_t cmma_dirty_pages; 645 /* subset of available cpu features enabled by user space */ 646 DECLARE_BITMAP(cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS); 647 /* indexed by vcpu_idx */ 648 DECLARE_BITMAP(idle_mask, KVM_MAX_VCPUS); 649 struct kvm_s390_gisa_interrupt gisa_int; 650 struct kvm_s390_pv pv; 651 struct list_head kzdev_list; 652 spinlock_t kzdev_list_lock; 653 struct kvm_s390_mmu_cache *mc; 654 }; 655 656 #define KVM_HVA_ERR_BAD (-1UL) 657 #define KVM_HVA_ERR_RO_BAD (-2UL) 658 659 static inline bool kvm_is_error_hva(unsigned long addr) 660 { 661 return IS_ERR_VALUE(addr); 662 } 663 664 #define ASYNC_PF_PER_VCPU 64 665 struct kvm_arch_async_pf { 666 unsigned long pfault_token; 667 }; 668 669 bool kvm_arch_can_dequeue_async_page_present(struct kvm_vcpu *vcpu); 670 671 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, 672 struct kvm_async_pf *work); 673 674 bool kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, 675 struct kvm_async_pf *work); 676 677 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, 678 struct kvm_async_pf *work); 679 680 static inline void kvm_arch_async_page_present_queued(struct kvm_vcpu *vcpu) {} 681 682 void kvm_arch_crypto_clear_masks(struct kvm *kvm); 683 void kvm_arch_crypto_set_masks(struct kvm *kvm, unsigned long *apm, 684 unsigned long *aqm, unsigned long *adm); 685 686 #define SIE64_RETURN_NORMAL 0 687 #define SIE64_RETURN_MCCK 1 688 689 int __sie64a(phys_addr_t sie_block_phys, struct kvm_s390_sie_block *sie_block, u64 *rsa, 690 unsigned long gasce); 691 692 static inline int sie64a(struct kvm_s390_sie_block *sie_block, u64 *rsa, unsigned long gasce) 693 { 694 return __sie64a(virt_to_phys(sie_block), sie_block, rsa, gasce); 695 } 696 697 extern char sie_exit; 698 699 bool kvm_s390_pv_is_protected(struct kvm *kvm); 700 bool kvm_s390_pv_cpu_is_protected(struct kvm_vcpu *vcpu); 701 702 extern int kvm_s390_enter_exit_sie(struct kvm_s390_sie_block *scb, 703 u64 *gprs, unsigned long gasce); 704 705 extern int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc); 706 extern int kvm_s390_gisc_unregister(struct kvm *kvm, u32 gisc); 707 708 bool kvm_s390_is_gpa_in_memslot(struct kvm *kvm, gpa_t gpa); 709 710 static inline void kvm_arch_free_memslot(struct kvm *kvm, 711 struct kvm_memory_slot *slot) {} 712 static inline void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen) {} 713 static inline void kvm_arch_flush_shadow_all(struct kvm *kvm) {} 714 static inline void kvm_arch_flush_shadow_memslot(struct kvm *kvm, 715 struct kvm_memory_slot *slot) {} 716 static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu) {} 717 static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {} 718 719 #define __KVM_HAVE_ARCH_VM_FREE 720 void kvm_arch_free_vm(struct kvm *kvm); 721 722 struct zpci_kvm_hook { 723 int (*kvm_register)(void *opaque, struct kvm *kvm); 724 void (*kvm_unregister)(void *opaque); 725 }; 726 727 extern struct zpci_kvm_hook zpci_kvm_hook; 728 729 #endif /* ASM_KVM_HOST_S390_H */ 730