|
39 | 39 |
|
40 | 40 | #define KVM_MAX_VCPUS VGIC_V3_MAX_CPUS |
41 | 41 |
|
42 | | -#define KVM_VCPU_MAX_FEATURES 7 |
| 42 | +#define KVM_VCPU_MAX_FEATURES 9 |
43 | 43 | #define KVM_VCPU_VALID_FEATURES (BIT(KVM_VCPU_MAX_FEATURES) - 1) |
44 | 44 |
|
45 | 45 | #define KVM_REQ_SLEEP \ |
|
53 | 53 | #define KVM_REQ_RESYNC_PMU_EL0 KVM_ARCH_REQ(7) |
54 | 54 | #define KVM_REQ_NESTED_S2_UNMAP KVM_ARCH_REQ(8) |
55 | 55 | #define KVM_REQ_GUEST_HYP_IRQ_PENDING KVM_ARCH_REQ(9) |
| 56 | +#define KVM_REQ_MAP_L1_VNCR_EL2 KVM_ARCH_REQ(10) |
56 | 57 |
|
57 | 58 | #define KVM_DIRTY_LOG_MANUAL_CAPS (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | \ |
58 | 59 | KVM_DIRTY_LOG_INITIALLY_SET) |
@@ -395,6 +396,9 @@ struct kvm_arch { |
395 | 396 | /* Masks for VNCR-backed and general EL2 sysregs */ |
396 | 397 | struct kvm_sysreg_masks *sysreg_masks; |
397 | 398 |
|
| 399 | + /* Count the number of VNCR_EL2 currently mapped */ |
| 400 | + atomic_t vncr_map_count; |
| 401 | + |
398 | 402 | /* |
399 | 403 | * For an untrusted host VM, 'pkvm.handle' is used to lookup |
400 | 404 | * the associated pKVM instance in the hypervisor. |
@@ -573,6 +577,8 @@ enum vcpu_sysreg { |
573 | 577 | VNCR(HDFGRTR2_EL2), |
574 | 578 | VNCR(HDFGWTR2_EL2), |
575 | 579 |
|
| 580 | + VNCR(VNCR_EL2), |
| 581 | + |
576 | 582 | VNCR(CNTVOFF_EL2), |
577 | 583 | VNCR(CNTV_CVAL_EL0), |
578 | 584 | VNCR(CNTV_CTL_EL0), |
@@ -696,6 +702,8 @@ struct kvm_host_data { |
696 | 702 | #define KVM_HOST_DATA_FLAG_HAS_TRBE 1 |
697 | 703 | #define KVM_HOST_DATA_FLAG_TRBE_ENABLED 4 |
698 | 704 | #define KVM_HOST_DATA_FLAG_EL1_TRACING_CONFIGURED 5 |
| 705 | +#define KVM_HOST_DATA_FLAG_VCPU_IN_HYP_CONTEXT 6 |
| 706 | +#define KVM_HOST_DATA_FLAG_L1_VNCR_MAPPED 7 |
699 | 707 | unsigned long flags; |
700 | 708 |
|
701 | 709 | struct kvm_cpu_context host_ctxt; |
@@ -772,6 +780,8 @@ struct vcpu_reset_state { |
772 | 780 | bool reset; |
773 | 781 | }; |
774 | 782 |
|
| 783 | +struct vncr_tlb; |
| 784 | + |
775 | 785 | struct kvm_vcpu_arch { |
776 | 786 | struct kvm_cpu_context ctxt; |
777 | 787 |
|
@@ -866,6 +876,9 @@ struct kvm_vcpu_arch { |
866 | 876 |
|
867 | 877 | /* Per-vcpu CCSIDR override or NULL */ |
868 | 878 | u32 *ccsidr; |
| 879 | + |
| 880 | + /* Per-vcpu TLB for VNCR_EL2 -- NULL when !NV */ |
| 881 | + struct vncr_tlb *vncr_tlb; |
869 | 882 | }; |
870 | 883 |
|
871 | 884 | /* |
|
0 commit comments