diff options
| -rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index 61190ddd9f3b..42bd2e694b1b 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
| @@ -841,6 +841,10 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) | |||
| 841 | * Set the decrementer to the guest decrementer. | 841 | * Set the decrementer to the guest decrementer. |
| 842 | */ | 842 | */ |
| 843 | ld r8,VCPU_DEC_EXPIRES(r4) | 843 | ld r8,VCPU_DEC_EXPIRES(r4) |
| 844 | /* r8 is a host timebase value here, convert to guest TB */ | ||
| 845 | ld r5,HSTATE_KVM_VCORE(r13) | ||
| 846 | ld r6,VCORE_TB_OFFSET(r5) | ||
| 847 | add r8,r8,r6 | ||
| 844 | mftb r7 | 848 | mftb r7 |
| 845 | subf r3,r7,r8 | 849 | subf r3,r7,r8 |
| 846 | mtspr SPRN_DEC,r3 | 850 | mtspr SPRN_DEC,r3 |
| @@ -1204,6 +1208,10 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_201) | |||
| 1204 | mftb r6 | 1208 | mftb r6 |
| 1205 | extsw r5,r5 | 1209 | extsw r5,r5 |
| 1206 | add r5,r5,r6 | 1210 | add r5,r5,r6 |
| 1211 | /* r5 is a guest timebase value here, convert to host TB */ | ||
| 1212 | ld r3,HSTATE_KVM_VCORE(r13) | ||
| 1213 | ld r4,VCORE_TB_OFFSET(r3) | ||
| 1214 | subf r5,r4,r5 | ||
| 1207 | std r5,VCPU_DEC_EXPIRES(r9) | 1215 | std r5,VCPU_DEC_EXPIRES(r9) |
| 1208 | 1216 | ||
| 1209 | BEGIN_FTR_SECTION | 1217 | BEGIN_FTR_SECTION |
| @@ -1479,7 +1487,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) | |||
| 1479 | ld r8,VCORE_TB_OFFSET(r5) | 1487 | ld r8,VCORE_TB_OFFSET(r5) |
| 1480 | cmpdi r8,0 | 1488 | cmpdi r8,0 |
| 1481 | beq 17f | 1489 | beq 17f |
| 1482 | mftb r6 /* current host timebase */ | 1490 | mftb r6 /* current guest timebase */ |
| 1483 | subf r8,r8,r6 | 1491 | subf r8,r8,r6 |
| 1484 | mtspr SPRN_TBU40,r8 /* update upper 40 bits */ | 1492 | mtspr SPRN_TBU40,r8 /* update upper 40 bits */ |
| 1485 | mftb r7 /* check if lower 24 bits overflowed */ | 1493 | mftb r7 /* check if lower 24 bits overflowed */ |
