17
17
18
18
static inline void __sysreg_save_common_state (struct kvm_cpu_context * ctxt )
19
19
{
20
- ctxt -> sys_regs [ MDSCR_EL1 ] = read_sysreg (mdscr_el1 );
20
+ ctxt_sys_reg ( ctxt , MDSCR_EL1 ) = read_sysreg (mdscr_el1 );
21
21
}
22
22
23
23
static inline void __sysreg_save_user_state (struct kvm_cpu_context * ctxt )
24
24
{
25
- ctxt -> sys_regs [ TPIDR_EL0 ] = read_sysreg (tpidr_el0 );
26
- ctxt -> sys_regs [ TPIDRRO_EL0 ] = read_sysreg (tpidrro_el0 );
25
+ ctxt_sys_reg ( ctxt , TPIDR_EL0 ) = read_sysreg (tpidr_el0 );
26
+ ctxt_sys_reg ( ctxt , TPIDRRO_EL0 ) = read_sysreg (tpidrro_el0 );
27
27
}
28
28
29
29
static inline void __sysreg_save_el1_state (struct kvm_cpu_context * ctxt )
30
30
{
31
- ctxt -> sys_regs [ CSSELR_EL1 ] = read_sysreg (csselr_el1 );
32
- ctxt -> sys_regs [ SCTLR_EL1 ] = read_sysreg_el1 (SYS_SCTLR );
33
- ctxt -> sys_regs [ CPACR_EL1 ] = read_sysreg_el1 (SYS_CPACR );
34
- ctxt -> sys_regs [ TTBR0_EL1 ] = read_sysreg_el1 (SYS_TTBR0 );
35
- ctxt -> sys_regs [ TTBR1_EL1 ] = read_sysreg_el1 (SYS_TTBR1 );
36
- ctxt -> sys_regs [ TCR_EL1 ] = read_sysreg_el1 (SYS_TCR );
37
- ctxt -> sys_regs [ ESR_EL1 ] = read_sysreg_el1 (SYS_ESR );
38
- ctxt -> sys_regs [ AFSR0_EL1 ] = read_sysreg_el1 (SYS_AFSR0 );
39
- ctxt -> sys_regs [ AFSR1_EL1 ] = read_sysreg_el1 (SYS_AFSR1 );
40
- ctxt -> sys_regs [ FAR_EL1 ] = read_sysreg_el1 (SYS_FAR );
41
- ctxt -> sys_regs [ MAIR_EL1 ] = read_sysreg_el1 (SYS_MAIR );
42
- ctxt -> sys_regs [ VBAR_EL1 ] = read_sysreg_el1 (SYS_VBAR );
43
- ctxt -> sys_regs [ CONTEXTIDR_EL1 ] = read_sysreg_el1 (SYS_CONTEXTIDR );
44
- ctxt -> sys_regs [ AMAIR_EL1 ] = read_sysreg_el1 (SYS_AMAIR );
45
- ctxt -> sys_regs [ CNTKCTL_EL1 ] = read_sysreg_el1 (SYS_CNTKCTL );
46
- ctxt -> sys_regs [ PAR_EL1 ] = read_sysreg (par_el1 );
47
- ctxt -> sys_regs [ TPIDR_EL1 ] = read_sysreg (tpidr_el1 );
31
+ ctxt_sys_reg ( ctxt , CSSELR_EL1 ) = read_sysreg (csselr_el1 );
32
+ ctxt_sys_reg ( ctxt , SCTLR_EL1 ) = read_sysreg_el1 (SYS_SCTLR );
33
+ ctxt_sys_reg ( ctxt , CPACR_EL1 ) = read_sysreg_el1 (SYS_CPACR );
34
+ ctxt_sys_reg ( ctxt , TTBR0_EL1 ) = read_sysreg_el1 (SYS_TTBR0 );
35
+ ctxt_sys_reg ( ctxt , TTBR1_EL1 ) = read_sysreg_el1 (SYS_TTBR1 );
36
+ ctxt_sys_reg ( ctxt , TCR_EL1 ) = read_sysreg_el1 (SYS_TCR );
37
+ ctxt_sys_reg ( ctxt , ESR_EL1 ) = read_sysreg_el1 (SYS_ESR );
38
+ ctxt_sys_reg ( ctxt , AFSR0_EL1 ) = read_sysreg_el1 (SYS_AFSR0 );
39
+ ctxt_sys_reg ( ctxt , AFSR1_EL1 ) = read_sysreg_el1 (SYS_AFSR1 );
40
+ ctxt_sys_reg ( ctxt , FAR_EL1 ) = read_sysreg_el1 (SYS_FAR );
41
+ ctxt_sys_reg ( ctxt , MAIR_EL1 ) = read_sysreg_el1 (SYS_MAIR );
42
+ ctxt_sys_reg ( ctxt , VBAR_EL1 ) = read_sysreg_el1 (SYS_VBAR );
43
+ ctxt_sys_reg ( ctxt , CONTEXTIDR_EL1 ) = read_sysreg_el1 (SYS_CONTEXTIDR );
44
+ ctxt_sys_reg ( ctxt , AMAIR_EL1 ) = read_sysreg_el1 (SYS_AMAIR );
45
+ ctxt_sys_reg ( ctxt , CNTKCTL_EL1 ) = read_sysreg_el1 (SYS_CNTKCTL );
46
+ ctxt_sys_reg ( ctxt , PAR_EL1 ) = read_sysreg (par_el1 );
47
+ ctxt_sys_reg ( ctxt , TPIDR_EL1 ) = read_sysreg (tpidr_el1 );
48
48
49
49
ctxt -> gp_regs .sp_el1 = read_sysreg (sp_el1 );
50
50
ctxt -> gp_regs .elr_el1 = read_sysreg_el1 (SYS_ELR );
@@ -57,55 +57,55 @@ static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt)
57
57
ctxt -> gp_regs .regs .pstate = read_sysreg_el2 (SYS_SPSR );
58
58
59
59
if (cpus_have_final_cap (ARM64_HAS_RAS_EXTN ))
60
- ctxt -> sys_regs [ DISR_EL1 ] = read_sysreg_s (SYS_VDISR_EL2 );
60
+ ctxt_sys_reg ( ctxt , DISR_EL1 ) = read_sysreg_s (SYS_VDISR_EL2 );
61
61
}
62
62
63
63
static inline void __sysreg_restore_common_state (struct kvm_cpu_context * ctxt )
64
64
{
65
- write_sysreg (ctxt -> sys_regs [ MDSCR_EL1 ], mdscr_el1 );
65
+ write_sysreg (ctxt_sys_reg ( ctxt , MDSCR_EL1 ), mdscr_el1 );
66
66
}
67
67
68
68
static inline void __sysreg_restore_user_state (struct kvm_cpu_context * ctxt )
69
69
{
70
- write_sysreg (ctxt -> sys_regs [ TPIDR_EL0 ], tpidr_el0 );
71
- write_sysreg (ctxt -> sys_regs [ TPIDRRO_EL0 ] , tpidrro_el0 );
70
+ write_sysreg (ctxt_sys_reg ( ctxt , TPIDR_EL0 ), tpidr_el0 );
71
+ write_sysreg (ctxt_sys_reg ( ctxt , TPIDRRO_EL0 ) , tpidrro_el0 );
72
72
}
73
73
74
74
static inline void __sysreg_restore_el1_state (struct kvm_cpu_context * ctxt )
75
75
{
76
- write_sysreg (ctxt -> sys_regs [ MPIDR_EL1 ], vmpidr_el2 );
77
- write_sysreg (ctxt -> sys_regs [ CSSELR_EL1 ] , csselr_el1 );
76
+ write_sysreg (ctxt_sys_reg ( ctxt , MPIDR_EL1 ), vmpidr_el2 );
77
+ write_sysreg (ctxt_sys_reg ( ctxt , CSSELR_EL1 ) , csselr_el1 );
78
78
79
79
if (has_vhe () ||
80
80
!cpus_have_final_cap (ARM64_WORKAROUND_SPECULATIVE_AT )) {
81
- write_sysreg_el1 (ctxt -> sys_regs [ SCTLR_EL1 ] , SYS_SCTLR );
82
- write_sysreg_el1 (ctxt -> sys_regs [ TCR_EL1 ] , SYS_TCR );
81
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , SCTLR_EL1 ) , SYS_SCTLR );
82
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , TCR_EL1 ) , SYS_TCR );
83
83
} else if (!ctxt -> __hyp_running_vcpu ) {
84
84
/*
85
85
* Must only be done for guest registers, hence the context
86
86
* test. We're coming from the host, so SCTLR.M is already
87
87
* set. Pairs with nVHE's __activate_traps().
88
88
*/
89
- write_sysreg_el1 ((ctxt -> sys_regs [ TCR_EL1 ] |
89
+ write_sysreg_el1 ((ctxt_sys_reg ( ctxt , TCR_EL1 ) |
90
90
TCR_EPD1_MASK | TCR_EPD0_MASK ),
91
91
SYS_TCR );
92
92
isb ();
93
93
}
94
94
95
- write_sysreg_el1 (ctxt -> sys_regs [ CPACR_EL1 ] , SYS_CPACR );
96
- write_sysreg_el1 (ctxt -> sys_regs [ TTBR0_EL1 ] , SYS_TTBR0 );
97
- write_sysreg_el1 (ctxt -> sys_regs [ TTBR1_EL1 ] , SYS_TTBR1 );
98
- write_sysreg_el1 (ctxt -> sys_regs [ ESR_EL1 ] , SYS_ESR );
99
- write_sysreg_el1 (ctxt -> sys_regs [ AFSR0_EL1 ] , SYS_AFSR0 );
100
- write_sysreg_el1 (ctxt -> sys_regs [ AFSR1_EL1 ] , SYS_AFSR1 );
101
- write_sysreg_el1 (ctxt -> sys_regs [ FAR_EL1 ] , SYS_FAR );
102
- write_sysreg_el1 (ctxt -> sys_regs [ MAIR_EL1 ] , SYS_MAIR );
103
- write_sysreg_el1 (ctxt -> sys_regs [ VBAR_EL1 ] , SYS_VBAR );
104
- write_sysreg_el1 (ctxt -> sys_regs [ CONTEXTIDR_EL1 ], SYS_CONTEXTIDR );
105
- write_sysreg_el1 (ctxt -> sys_regs [ AMAIR_EL1 ] , SYS_AMAIR );
106
- write_sysreg_el1 (ctxt -> sys_regs [ CNTKCTL_EL1 ], SYS_CNTKCTL );
107
- write_sysreg (ctxt -> sys_regs [ PAR_EL1 ], par_el1 );
108
- write_sysreg (ctxt -> sys_regs [ TPIDR_EL1 ], tpidr_el1 );
95
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , CPACR_EL1 ) , SYS_CPACR );
96
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , TTBR0_EL1 ) , SYS_TTBR0 );
97
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , TTBR1_EL1 ) , SYS_TTBR1 );
98
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , ESR_EL1 ) , SYS_ESR );
99
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , AFSR0_EL1 ) , SYS_AFSR0 );
100
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , AFSR1_EL1 ) , SYS_AFSR1 );
101
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , FAR_EL1 ) , SYS_FAR );
102
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , MAIR_EL1 ) , SYS_MAIR );
103
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , VBAR_EL1 ) , SYS_VBAR );
104
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , CONTEXTIDR_EL1 ), SYS_CONTEXTIDR );
105
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , AMAIR_EL1 ) , SYS_AMAIR );
106
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , CNTKCTL_EL1 ), SYS_CNTKCTL );
107
+ write_sysreg (ctxt_sys_reg ( ctxt , PAR_EL1 ), par_el1 );
108
+ write_sysreg (ctxt_sys_reg ( ctxt , TPIDR_EL1 ), tpidr_el1 );
109
109
110
110
if (!has_vhe () &&
111
111
cpus_have_final_cap (ARM64_WORKAROUND_SPECULATIVE_AT ) &&
@@ -120,9 +120,9 @@ static inline void __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt)
120
120
* deconfigured and disabled. We can now restore the host's
121
121
* S1 configuration: SCTLR, and only then TCR.
122
122
*/
123
- write_sysreg_el1 (ctxt -> sys_regs [ SCTLR_EL1 ] , SYS_SCTLR );
123
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , SCTLR_EL1 ) , SYS_SCTLR );
124
124
isb ();
125
- write_sysreg_el1 (ctxt -> sys_regs [ TCR_EL1 ] , SYS_TCR );
125
+ write_sysreg_el1 (ctxt_sys_reg ( ctxt , TCR_EL1 ) , SYS_TCR );
126
126
}
127
127
128
128
write_sysreg (ctxt -> gp_regs .sp_el1 , sp_el1 );
@@ -153,51 +153,49 @@ static inline void __sysreg_restore_el2_return_state(struct kvm_cpu_context *ctx
153
153
write_sysreg_el2 (pstate , SYS_SPSR );
154
154
155
155
if (cpus_have_final_cap (ARM64_HAS_RAS_EXTN ))
156
- write_sysreg_s (ctxt -> sys_regs [ DISR_EL1 ] , SYS_VDISR_EL2 );
156
+ write_sysreg_s (ctxt_sys_reg ( ctxt , DISR_EL1 ) , SYS_VDISR_EL2 );
157
157
}
158
158
159
159
static inline void __sysreg32_save_state (struct kvm_vcpu * vcpu )
160
160
{
161
- u64 * spsr , * sysreg ;
161
+ u64 * spsr ;
162
162
163
163
if (!vcpu_el1_is_32bit (vcpu ))
164
164
return ;
165
165
166
166
spsr = vcpu -> arch .ctxt .gp_regs .spsr ;
167
- sysreg = vcpu -> arch .ctxt .sys_regs ;
168
167
169
168
spsr [KVM_SPSR_ABT ] = read_sysreg (spsr_abt );
170
169
spsr [KVM_SPSR_UND ] = read_sysreg (spsr_und );
171
170
spsr [KVM_SPSR_IRQ ] = read_sysreg (spsr_irq );
172
171
spsr [KVM_SPSR_FIQ ] = read_sysreg (spsr_fiq );
173
172
174
- sysreg [ DACR32_EL2 ] = read_sysreg (dacr32_el2 );
175
- sysreg [ IFSR32_EL2 ] = read_sysreg (ifsr32_el2 );
173
+ __vcpu_sys_reg ( vcpu , DACR32_EL2 ) = read_sysreg (dacr32_el2 );
174
+ __vcpu_sys_reg ( vcpu , IFSR32_EL2 ) = read_sysreg (ifsr32_el2 );
176
175
177
176
if (has_vhe () || vcpu -> arch .flags & KVM_ARM64_DEBUG_DIRTY )
178
- sysreg [ DBGVCR32_EL2 ] = read_sysreg (dbgvcr32_el2 );
177
+ __vcpu_sys_reg ( vcpu , DBGVCR32_EL2 ) = read_sysreg (dbgvcr32_el2 );
179
178
}
180
179
181
180
static inline void __sysreg32_restore_state (struct kvm_vcpu * vcpu )
182
181
{
183
- u64 * spsr , * sysreg ;
182
+ u64 * spsr ;
184
183
185
184
if (!vcpu_el1_is_32bit (vcpu ))
186
185
return ;
187
186
188
187
spsr = vcpu -> arch .ctxt .gp_regs .spsr ;
189
- sysreg = vcpu -> arch .ctxt .sys_regs ;
190
188
191
189
write_sysreg (spsr [KVM_SPSR_ABT ], spsr_abt );
192
190
write_sysreg (spsr [KVM_SPSR_UND ], spsr_und );
193
191
write_sysreg (spsr [KVM_SPSR_IRQ ], spsr_irq );
194
192
write_sysreg (spsr [KVM_SPSR_FIQ ], spsr_fiq );
195
193
196
- write_sysreg (sysreg [ DACR32_EL2 ] , dacr32_el2 );
197
- write_sysreg (sysreg [ IFSR32_EL2 ] , ifsr32_el2 );
194
+ write_sysreg (__vcpu_sys_reg ( vcpu , DACR32_EL2 ) , dacr32_el2 );
195
+ write_sysreg (__vcpu_sys_reg ( vcpu , IFSR32_EL2 ) , ifsr32_el2 );
198
196
199
197
if (has_vhe () || vcpu -> arch .flags & KVM_ARM64_DEBUG_DIRTY )
200
- write_sysreg (sysreg [ DBGVCR32_EL2 ] , dbgvcr32_el2 );
198
+ write_sysreg (__vcpu_sys_reg ( vcpu , DBGVCR32_EL2 ) , dbgvcr32_el2 );
201
199
}
202
200
203
201
#endif /* __ARM64_KVM_HYP_SYSREG_SR_H__ */
0 commit comments