diff options
Diffstat (limited to 'arch/powerpc/include/asm/kvm_host.h')
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 61 |
1 files changed, 51 insertions, 10 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 237d1d25b448..1eaea2dea174 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -288,6 +288,7 @@ struct kvmppc_vcore { | |||
288 | int n_woken; | 288 | int n_woken; |
289 | int nap_count; | 289 | int nap_count; |
290 | int napping_threads; | 290 | int napping_threads; |
291 | int first_vcpuid; | ||
291 | u16 pcpu; | 292 | u16 pcpu; |
292 | u16 last_cpu; | 293 | u16 last_cpu; |
293 | u8 vcore_state; | 294 | u8 vcore_state; |
@@ -298,10 +299,12 @@ struct kvmppc_vcore { | |||
298 | u64 stolen_tb; | 299 | u64 stolen_tb; |
299 | u64 preempt_tb; | 300 | u64 preempt_tb; |
300 | struct kvm_vcpu *runner; | 301 | struct kvm_vcpu *runner; |
302 | struct kvm *kvm; | ||
301 | u64 tb_offset; /* guest timebase - host timebase */ | 303 | u64 tb_offset; /* guest timebase - host timebase */ |
302 | ulong lpcr; | 304 | ulong lpcr; |
303 | u32 arch_compat; | 305 | u32 arch_compat; |
304 | ulong pcr; | 306 | ulong pcr; |
307 | ulong dpdes; /* doorbell state (POWER8) */ | ||
305 | }; | 308 | }; |
306 | 309 | ||
307 | #define VCORE_ENTRY_COUNT(vc) ((vc)->entry_exit_count & 0xff) | 310 | #define VCORE_ENTRY_COUNT(vc) ((vc)->entry_exit_count & 0xff) |
@@ -410,8 +413,7 @@ struct kvm_vcpu_arch { | |||
410 | 413 | ||
411 | ulong gpr[32]; | 414 | ulong gpr[32]; |
412 | 415 | ||
413 | u64 fpr[32]; | 416 | struct thread_fp_state fp; |
414 | u64 fpscr; | ||
415 | 417 | ||
416 | #ifdef CONFIG_SPE | 418 | #ifdef CONFIG_SPE |
417 | ulong evr[32]; | 419 | ulong evr[32]; |
@@ -420,12 +422,7 @@ struct kvm_vcpu_arch { | |||
420 | u64 acc; | 422 | u64 acc; |
421 | #endif | 423 | #endif |
422 | #ifdef CONFIG_ALTIVEC | 424 | #ifdef CONFIG_ALTIVEC |
423 | vector128 vr[32]; | 425 | struct thread_vr_state vr; |
424 | vector128 vscr; | ||
425 | #endif | ||
426 | |||
427 | #ifdef CONFIG_VSX | ||
428 | u64 vsr[64]; | ||
429 | #endif | 426 | #endif |
430 | 427 | ||
431 | #ifdef CONFIG_KVM_BOOKE_HV | 428 | #ifdef CONFIG_KVM_BOOKE_HV |
@@ -452,6 +449,7 @@ struct kvm_vcpu_arch { | |||
452 | ulong pc; | 449 | ulong pc; |
453 | ulong ctr; | 450 | ulong ctr; |
454 | ulong lr; | 451 | ulong lr; |
452 | ulong tar; | ||
455 | 453 | ||
456 | ulong xer; | 454 | ulong xer; |
457 | u32 cr; | 455 | u32 cr; |
@@ -461,13 +459,30 @@ struct kvm_vcpu_arch { | |||
461 | ulong guest_owned_ext; | 459 | ulong guest_owned_ext; |
462 | ulong purr; | 460 | ulong purr; |
463 | ulong spurr; | 461 | ulong spurr; |
462 | ulong ic; | ||
463 | ulong vtb; | ||
464 | ulong dscr; | 464 | ulong dscr; |
465 | ulong amr; | 465 | ulong amr; |
466 | ulong uamor; | 466 | ulong uamor; |
467 | ulong iamr; | ||
467 | u32 ctrl; | 468 | u32 ctrl; |
469 | u32 dabrx; | ||
468 | ulong dabr; | 470 | ulong dabr; |
471 | ulong dawr; | ||
472 | ulong dawrx; | ||
473 | ulong ciabr; | ||
469 | ulong cfar; | 474 | ulong cfar; |
470 | ulong ppr; | 475 | ulong ppr; |
476 | ulong pspb; | ||
477 | ulong fscr; | ||
478 | ulong ebbhr; | ||
479 | ulong ebbrr; | ||
480 | ulong bescr; | ||
481 | ulong csigr; | ||
482 | ulong tacr; | ||
483 | ulong tcscr; | ||
484 | ulong acop; | ||
485 | ulong wort; | ||
471 | ulong shadow_srr1; | 486 | ulong shadow_srr1; |
472 | #endif | 487 | #endif |
473 | u32 vrsave; /* also USPRG0 */ | 488 | u32 vrsave; /* also USPRG0 */ |
@@ -502,10 +517,33 @@ struct kvm_vcpu_arch { | |||
502 | u32 ccr1; | 517 | u32 ccr1; |
503 | u32 dbsr; | 518 | u32 dbsr; |
504 | 519 | ||
505 | u64 mmcr[3]; | 520 | u64 mmcr[5]; |
506 | u32 pmc[8]; | 521 | u32 pmc[8]; |
522 | u32 spmc[2]; | ||
507 | u64 siar; | 523 | u64 siar; |
508 | u64 sdar; | 524 | u64 sdar; |
525 | u64 sier; | ||
526 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
527 | u64 tfhar; | ||
528 | u64 texasr; | ||
529 | u64 tfiar; | ||
530 | |||
531 | u32 cr_tm; | ||
532 | u64 lr_tm; | ||
533 | u64 ctr_tm; | ||
534 | u64 amr_tm; | ||
535 | u64 ppr_tm; | ||
536 | u64 dscr_tm; | ||
537 | u64 tar_tm; | ||
538 | |||
539 | ulong gpr_tm[32]; | ||
540 | |||
541 | struct thread_fp_state fp_tm; | ||
542 | |||
543 | struct thread_vr_state vr_tm; | ||
544 | u32 vrsave_tm; /* also USPRG0 */ | ||
545 | |||
546 | #endif | ||
509 | 547 | ||
510 | #ifdef CONFIG_KVM_EXIT_TIMING | 548 | #ifdef CONFIG_KVM_EXIT_TIMING |
511 | struct mutex exit_timing_lock; | 549 | struct mutex exit_timing_lock; |
@@ -546,6 +584,7 @@ struct kvm_vcpu_arch { | |||
546 | #endif | 584 | #endif |
547 | gpa_t paddr_accessed; | 585 | gpa_t paddr_accessed; |
548 | gva_t vaddr_accessed; | 586 | gva_t vaddr_accessed; |
587 | pgd_t *pgdir; | ||
549 | 588 | ||
550 | u8 io_gpr; /* GPR used as IO source/target */ | 589 | u8 io_gpr; /* GPR used as IO source/target */ |
551 | u8 mmio_is_bigendian; | 590 | u8 mmio_is_bigendian; |
@@ -603,7 +642,6 @@ struct kvm_vcpu_arch { | |||
603 | struct list_head run_list; | 642 | struct list_head run_list; |
604 | struct task_struct *run_task; | 643 | struct task_struct *run_task; |
605 | struct kvm_run *kvm_run; | 644 | struct kvm_run *kvm_run; |
606 | pgd_t *pgdir; | ||
607 | 645 | ||
608 | spinlock_t vpa_update_lock; | 646 | spinlock_t vpa_update_lock; |
609 | struct kvmppc_vpa vpa; | 647 | struct kvmppc_vpa vpa; |
@@ -616,9 +654,12 @@ struct kvm_vcpu_arch { | |||
616 | spinlock_t tbacct_lock; | 654 | spinlock_t tbacct_lock; |
617 | u64 busy_stolen; | 655 | u64 busy_stolen; |
618 | u64 busy_preempt; | 656 | u64 busy_preempt; |
657 | unsigned long intr_msr; | ||
619 | #endif | 658 | #endif |
620 | }; | 659 | }; |
621 | 660 | ||
661 | #define VCPU_FPR(vcpu, i) (vcpu)->arch.fp.fpr[i][TS_FPROFFSET] | ||
662 | |||
622 | /* Values for vcpu->arch.state */ | 663 | /* Values for vcpu->arch.state */ |
623 | #define KVMPPC_VCPU_NOTREADY 0 | 664 | #define KVMPPC_VCPU_NOTREADY 0 |
624 | #define KVMPPC_VCPU_RUNNABLE 1 | 665 | #define KVMPPC_VCPU_RUNNABLE 1 |