diff options
Diffstat (limited to 'arch/powerpc/kernel/kvm_emul.S')
-rw-r--r-- | arch/powerpc/kernel/kvm_emul.S | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/arch/powerpc/kernel/kvm_emul.S b/arch/powerpc/kernel/kvm_emul.S index a6e97e7a55e..65305325250 100644 --- a/arch/powerpc/kernel/kvm_emul.S +++ b/arch/powerpc/kernel/kvm_emul.S | |||
@@ -135,7 +135,8 @@ kvm_emulate_mtmsr: | |||
135 | 135 | ||
136 | /* Find the changed bits between old and new MSR */ | 136 | /* Find the changed bits between old and new MSR */ |
137 | kvm_emulate_mtmsr_reg1: | 137 | kvm_emulate_mtmsr_reg1: |
138 | xor r31, r0, r31 | 138 | ori r30, r0, 0 |
139 | xor r31, r30, r31 | ||
139 | 140 | ||
140 | /* Check if we need to really do mtmsr */ | 141 | /* Check if we need to really do mtmsr */ |
141 | LOAD_REG_IMMEDIATE(r30, MSR_CRITICAL_BITS) | 142 | LOAD_REG_IMMEDIATE(r30, MSR_CRITICAL_BITS) |
@@ -156,14 +157,17 @@ kvm_emulate_mtmsr_orig_ins: | |||
156 | 157 | ||
157 | maybe_stay_in_guest: | 158 | maybe_stay_in_guest: |
158 | 159 | ||
160 | /* Get the target register in r30 */ | ||
161 | kvm_emulate_mtmsr_reg2: | ||
162 | ori r30, r0, 0 | ||
163 | |||
159 | /* Check if we have to fetch an interrupt */ | 164 | /* Check if we have to fetch an interrupt */ |
160 | lwz r31, (KVM_MAGIC_PAGE + KVM_MAGIC_INT)(0) | 165 | lwz r31, (KVM_MAGIC_PAGE + KVM_MAGIC_INT)(0) |
161 | cmpwi r31, 0 | 166 | cmpwi r31, 0 |
162 | beq+ no_mtmsr | 167 | beq+ no_mtmsr |
163 | 168 | ||
164 | /* Check if we may trigger an interrupt */ | 169 | /* Check if we may trigger an interrupt */ |
165 | kvm_emulate_mtmsr_reg2: | 170 | andi. r31, r30, MSR_EE |
166 | andi. r31, r0, MSR_EE | ||
167 | beq no_mtmsr | 171 | beq no_mtmsr |
168 | 172 | ||
169 | b do_mtmsr | 173 | b do_mtmsr |
@@ -171,8 +175,7 @@ kvm_emulate_mtmsr_reg2: | |||
171 | no_mtmsr: | 175 | no_mtmsr: |
172 | 176 | ||
173 | /* Put MSR into magic page because we don't call mtmsr */ | 177 | /* Put MSR into magic page because we don't call mtmsr */ |
174 | kvm_emulate_mtmsr_reg3: | 178 | STL64(r30, KVM_MAGIC_PAGE + KVM_MAGIC_MSR, 0) |
175 | STL64(r0, KVM_MAGIC_PAGE + KVM_MAGIC_MSR, 0) | ||
176 | 179 | ||
177 | SCRATCH_RESTORE | 180 | SCRATCH_RESTORE |
178 | 181 | ||
@@ -193,10 +196,6 @@ kvm_emulate_mtmsr_reg1_offs: | |||
193 | kvm_emulate_mtmsr_reg2_offs: | 196 | kvm_emulate_mtmsr_reg2_offs: |
194 | .long (kvm_emulate_mtmsr_reg2 - kvm_emulate_mtmsr) / 4 | 197 | .long (kvm_emulate_mtmsr_reg2 - kvm_emulate_mtmsr) / 4 |
195 | 198 | ||
196 | .global kvm_emulate_mtmsr_reg3_offs | ||
197 | kvm_emulate_mtmsr_reg3_offs: | ||
198 | .long (kvm_emulate_mtmsr_reg3 - kvm_emulate_mtmsr) / 4 | ||
199 | |||
200 | .global kvm_emulate_mtmsr_orig_ins_offs | 199 | .global kvm_emulate_mtmsr_orig_ins_offs |
201 | kvm_emulate_mtmsr_orig_ins_offs: | 200 | kvm_emulate_mtmsr_orig_ins_offs: |
202 | .long (kvm_emulate_mtmsr_orig_ins - kvm_emulate_mtmsr) / 4 | 201 | .long (kvm_emulate_mtmsr_orig_ins - kvm_emulate_mtmsr) / 4 |