host_dawrx1 = mfspr(SPRN_DAWRX1);
        }
 
-       /*
-        * P8 and P9 suppress the HDEC exception when LPCR[HDICE] = 0,
-        * so set HDICE before writing HDEC.
-        */
-       mtspr(SPRN_LPCR, vcpu->kvm->arch.host_lpcr | LPCR_HDICE);
-       isync();
-
        hdec = time_limit - mftb();
-       if (hdec < 0) {
-               mtspr(SPRN_LPCR, vcpu->kvm->arch.host_lpcr);
-               isync();
+       if (hdec < 0)
                return BOOK3S_INTERRUPT_HV_DECREMENTER;
-       }
-       mtspr(SPRN_HDEC, hdec);
 
        if (vc->tb_offset) {
                u64 new_tb = mftb() + vc->tb_offset;
        mtspr(SPRN_LPCR, lpcr);
        isync();
 
+       /*
+        * P9 suppresses the HDEC exception when LPCR[HDICE] = 0,
+        * so set guest LPCR (with HDICE) before writing HDEC.
+        */
+       mtspr(SPRN_HDEC, hdec);
+
        kvmppc_xive_push_vcpu(vcpu);
 
        mtspr(SPRN_SRR0, vcpu->arch.shregs.srr0);